| 
					
				 | 
			
			
				@@ -0,0 +1,143 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//  PQSingletoMemoryUtil.swift 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//  PQSpeed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//  Created by SanW on 2020/6/9. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//  Copyright © 2020 BytesFlow. All rights reserved. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import UIKit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import Photos 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// MARK: - 内存缓存数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/// 内存缓存数据r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class PQSingletoMemoryUtil: NSObject { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static let shared = PQSingletoMemoryUtil() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isShowAttendPoint: Bool = false // 是否有关注更新 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var attendIdosUpdateCount: Int = 0 // 关注更新条数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isLeftSlipRemind: Bool = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var needLogin: Bool = false // 是否需要显示手机登录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isFinishedCoging: Bool = false // 是否已完成配置请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isFinishedAlias: Bool = false // 是否完成绑定别名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var selectedTabIndex: String? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var commandVideoItem: BFVideoItemProtocol? // 口令内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var commandLaunchParams: String = "" // 口令启动时的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var commandReportParams: [String: Any]? // 口令启动时解析的其他值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var h5MsgVid: String? // 剪切板id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isShowNoWiFiRemind: Bool = false // 是否提示过非WiFi提示 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isNeedRefreshAttend: Bool = false // 是否需要刷新关注 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isNeedRefreshJoinTopic: Bool = false // 是否需要刷新加入的话题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 剪切板content是否为空,如果为空走承接逻辑,冷启动不再加载缓存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isEmptyPasteContent: Bool = false { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        didSet { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BFLog(message: "isEmptyPasteContent = \(isEmptyPasteContent)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 展示无服务提示视图(剪切板 data.reportData.downloadButtonType为 weapp_share_noServiceDownloadApp/weapp_categoryTab_noServiceDownloadApp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isShowPasteNoServeView: Bool = false { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        didSet { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BFLog(message: "isShowPasteNoServeView = \(isShowPasteNoServeView)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// 是否正在展示广告view 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isLoadingSplashAdView: Bool = false { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        didSet { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BFLog(message: "isLoadingSplashAdView = \(isLoadingSplashAdView)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var cutBoardInfo: String? // 剪切板信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var cutBoard: String? // 剪切板来源cutBoardInfo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isPushLoading: Bool = false // 是否正在加载推送数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var coldLaunchType: coldLaunchType? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isColdLaunch: Bool = false // 冷启动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var coldLaunchStatus: Int = 0 // 1-请求中 2-请求成功 3-请求失败 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var deviceToken: String = "" // 推送deviceToken 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var activityData: Dictionary<String,Any>? // 活动数据信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isShowTodaySuccess: Bool = false // 是否已经展示过今日已完成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var sessionId: String = getUniqueId(desc: "sessionId") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var subSessionid: String? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isDefaultAtten: Bool = false // 是否默认进入关注 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isDefaultMineSingleVideoDetail: Bool = false // 是否默认进入我的单个视频详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var playCount: Int = 0 // 播放次数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var uploadDatas: [BFVideoItemProtocol] = Array<BFVideoItemProtocol>.init() // 正在上传的视频集合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var isShowUpSlideGuide: Bool = false // 是否展示了滑动向上的提示 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var showUpSlideData: BFVideoItemProtocol? // 是否展示了滑动向上的提示 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var makeVideoProjectId: String? // 制作视频项目Id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var draftboxId: String? // 草稿箱ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // add by ak 结构化数据 saveDraft api 要 用到的参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var sdata: String? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // add by ak 结构化数据 saveDraft api 要 用到的参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var title: String? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // add by ak 结构化数据 saveDraft api 要 用到的参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var coverUrl: String? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 未读数字 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var unReadInfo: Dictionary<String,Any>? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var abInfoData: [String: Any] = Dictionary<String, Any>.init() // 实验数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public var allExportSession: [PHAsset:AVAssetExportSession] = [PHAsset:AVAssetExportSession].init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public func updateTabPoint() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        let tabBar = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            rootViewController()?.tabBar 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        if isShowAttendPoint { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            tabBar?.showPoint(index: 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+////          tabBar.removePoint(index: 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// 创建sessionId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// - Returns: <#description#> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   public func createSesstionId() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sessionId = getUniqueId(desc: "sessionId") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subSessionid = sessionId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BFLog(message: "生成的sessionId = \(sessionId)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// 创建subSessionid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// - Returns: <#description#> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public func createSubSesstionId() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subSessionid = getUniqueId(desc: "subSessionid") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BFLog(message: "生成的subSessionid = \(String(describing: subSessionid))") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// 制作视频项目Id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// - Returns: <#description#> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public func createMakeVideoProjectId() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        makeVideoProjectId = cProjectIdPrefix + getUniqueId(desc: "makeVideoProjectId") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BFLog(message: "生成的projectId = \(String(describing: makeVideoProjectId))") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// 解析abInfoData 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// - Parameter abInfo: <#abInfo description#> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// - Returns: description 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public func parasABinfoData(abInfo: String?) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if abInfo != nil, (abInfo?.count ?? 0) > 0, abInfo != "{}" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            guard let infoDic = jsonStringToDictionary(abInfo!) else { return } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            abInfoData.merge(infoDic, uniquingKeysWith: { (key, _) -> Any in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BFLog(message: "=====abInfoData = \(abInfoData)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    override private init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super.init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        selectedTabIndex = getUserDefaults(key: cSelectedTabIndex) as? String 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if selectedTabIndex == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            saveUserDefaults(key: cSelectedTabIndex, value: "categoryTab") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            selectedTabIndex = "categoryTab" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public override func copy() -> Any { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return self 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public override func mutableCopy() -> Any { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return self 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |