@@ -3,31 +3,50 @@ import Foundation
33class PlistManagerUtils {
44
55 // 单例实例
6- static let shared = PlistManager ( plistName : " userSettings " )
6+ private static var instances : [ String : PlistManagerUtils ] = [ : ]
77
88 private var plistFileURL : URL
9+ private var plistExist : Bool = false
910 private var preferences : [ String : Any ]
1011 private var cachedChanges : [ String : Any ] = [ : ]
1112 private var isDirty = false
1213
14+ // 获取实例方法(支持多实例)
15+ static func instance( for plistName: String ) -> PlistManagerUtils {
16+ // 如果实例已存在,则返回现有实例
17+ if let instance = instances [ plistName] {
18+ return instance
19+ }
20+
21+ // 否则创建新的实例并存储
22+ let instance = PlistManagerUtils ( plistName: plistName)
23+ instances [ plistName] = instance
24+ return instance
25+ }
26+
1327 // 初始化 PlistManager,指定 plist 文件名
1428 private init ( plistName: String ) {
1529 // 获取沙盒中的 Preferences 目录路径
1630 let preferencesDirectory = FileManager . default. urls ( for: . libraryDirectory, in: . userDomainMask) . first!
17- self . plistFileURL = preferencesDirectory. appendingPathComponent ( " Preferences/ \( plistName) .plist " )
31+ let preferencesPath = preferencesDirectory. appendingPathComponent ( " Preferences " )
32+ self . plistFileURL = preferencesPath. appendingPathComponent ( " \( plistName) .plist " )
1833
1934 // 如果 plist 文件不存在,则创建一个空的文件
2035 if !FileManager. default. fileExists ( atPath: plistFileURL. path) {
2136 preferences = [ : ]
2237 save ( )
38+ NSLog ( " Reboot Tools----> 创建配置文件 " )
39+ plistExist = false //增加一个标识,让外界知道这个配置文件是新创建的
2340 } else {
24- preferences = loadPreferences ( )
41+ self . preferences = PlistManagerUtils . loadPreferences ( from: plistFileURL)
42+ NSLog ( " Reboot Tools----> 加载已有创建文件 " )
43+ plistExist = true
2544 }
2645 }
2746
2847 // 加载 plist 文件中的数据
29- private func loadPreferences( ) -> [ String : Any ] {
30- guard let data = try ? Data ( contentsOf: plistFileURL ) ,
48+ private static func loadPreferences( from url : URL ) -> [ String : Any ] {
49+ guard let data = try ? Data ( contentsOf: url ) ,
3150 let preferences = try ? PropertyListSerialization . propertyList ( from: data, options: [ ] , format: nil ) as? [ String : Any ] else {
3251 return [ : ]
3352 }
@@ -39,53 +58,60 @@ class PlistManagerUtils {
3958 do {
4059 let data = try PropertyListSerialization . data ( fromPropertyList: preferences, format: . xml, options: 0 )
4160 try data. write ( to: plistFileURL)
61+ NSLog ( " Reboot Tools----> Save successful Plist file path: \( plistFileURL. path) " )
4262 } catch {
43- print ( " Error saving preferences to plist: \( error. localizedDescription) " )
63+ print ( " Reboot Tools----> Error saving preferences to plist: \( error. localizedDescription) " )
4464 }
4565 }
66+
67+
68+ // 获取 plist 文件是否存在
69+ func isPlistExist( ) -> Bool {
70+ return plistExist
71+ }
4672
4773 // 获取指定 key 对应的 Int 值
48- func getInt( forKey key: String , defaultValue: Int ) -> Int {
74+ func getInt( key: String , defaultValue: Int ) -> Int {
4975 return preferences [ key] as? Int ?? defaultValue
5076 }
5177
5278 // 获取指定 key 对应的 Bool 值
53- func getBool( forKey key: String , defaultValue: Bool ) -> Bool {
79+ func getBool( key: String , defaultValue: Bool ) -> Bool {
5480 return preferences [ key] as? Bool ?? defaultValue
5581 }
5682
5783 // 获取指定 key 对应的 String 值
58- func getString( forKey key: String , defaultValue: String ) -> String {
84+ func getString( key: String , defaultValue: String ) -> String {
5985 return preferences [ key] as? String ?? defaultValue
6086 }
6187
6288 // 获取指定 key 对应的 Float 值
63- func getFloat( forKey key: String , defaultValue: Float ) -> Float {
89+ func getFloat( key: String , defaultValue: Float ) -> Float {
6490 return preferences [ key] as? Float ?? defaultValue
6591 }
6692
6793 // 获取指定 key 对应的 Double 值
68- func getDouble( forKey key: String , defaultValue: Double ) -> Double {
94+ func getDouble( key: String , defaultValue: Double ) -> Double {
6995 return preferences [ key] as? Double ?? defaultValue
7096 }
7197
7298 // 获取指定 key 对应的 Data 值
73- func getData( forKey key: String , defaultValue: Data ) -> Data {
99+ func getData( key: String , defaultValue: Data ) -> Data {
74100 return preferences [ key] as? Data ?? defaultValue
75101 }
76102
77103 // 获取指定 key 对应的 URL 值
78- func getURL( forKey key: String , defaultValue: URL ) -> URL {
104+ func getURL( key: String , defaultValue: URL ) -> URL {
79105 return preferences [ key] as? URL ?? defaultValue
80106 }
81107
82108 // 获取指定 key 对应的 Array 值
83- func getArray( forKey key: String , defaultValue: [ Any ] ) -> [ Any ] {
109+ func getArray( key: String , defaultValue: [ Any ] ) -> [ Any ] {
84110 return preferences [ key] as? [ Any ] ?? defaultValue
85111 }
86112
87113 // 获取指定 key 对应的 Dictionary 值
88- func getDictionary( forKey key: String , defaultValue: [ String : Any ] ) -> [ String : Any ] {
114+ func getDictionary( key: String , defaultValue: [ String : Any ] ) -> [ String : Any ] {
89115 return preferences [ key] as? [ String : Any ] ?? defaultValue
90116 }
91117
@@ -144,7 +170,7 @@ class PlistManagerUtils {
144170 }
145171
146172 // 删除指定 key 的数据
147- func remove( forKey key: String ) {
173+ func remove( key: String ) {
148174 cachedChanges [ key] = nil
149175 isDirty = true
150176 }
@@ -155,10 +181,14 @@ class PlistManagerUtils {
155181 try FileManager . default. removeItem ( at: plistFileURL)
156182 preferences = [ : ]
157183 } catch {
158- print ( " Error clearing plist file: \( error. localizedDescription) " )
184+ print ( " Reboot Tools----> Error clearing plist file: \( error. localizedDescription) " )
159185 }
160186 }
161187
188+ func commit( ) {
189+ self . apply ( )
190+ }
191+
162192 // 将更改保存到 plist
163193 func apply( ) {
164194 // 只有在有修改的情况下才进行保存
@@ -176,4 +206,5 @@ class PlistManagerUtils {
176206 isDirty = false
177207 }
178208 }
209+
179210}
0 commit comments