Swift 4(XCode 9.3)中如何将字典数组写入指定格式的plist文件?
如何用Swift 4将字典数组生成为指定格式的Plist文件?
首先要注意的是:你目标Plist里的ipport和upsport是字符串类型,但你现有的字典数组里这两个字段是数字类型(Int),所以第一步得先把这些数字转成字符串,不然生成的Plist会输出<integer>标签而不是<string>,不符合你的要求。
接下来可以用Swift的PropertyListSerialization类来完成序列化和写入操作,下面是完整的实现代码:
// 你的原始字典数组 let originalArray: [[String: Any]] = [ ["ipaddress": "192.168.10.101", "ipport": 12345, "upsname": "S 2000 (Port 1)", "upsport": 1], ["ipaddress": "192.168.10.102", "ipport": 12345, "upsname": "S 3000 (Port 2)", "upsport": 2], ["ipaddress": "192.168.10.103", "ipport": 12345, "upsname": "S 2000 (3)", "upsport": 3] ] // 第一步:转换数据类型,将数字转成字符串 var convertedArray = [[String: String]]() for dict in originalArray { var convertedDict = [String: String]() convertedDict["ipaddress"] = dict["ipaddress"] as? String ?? "" convertedDict["ipport"] = String(dict["ipport"] as? Int ?? 0) convertedDict["upsname"] = dict["upsname"] as? String ?? "" convertedDict["upsport"] = String(dict["upsport"] as? Int ?? 0) convertedArray.append(convertedDict) } // 第二步:获取要保存的Plist文件路径(这里以Documents目录为例) guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { print("无法获取Documents目录") return } let plistPath = documentsDirectory.appendingPathComponent("ups_config.plist") // 第三步:将数组序列化为Plist格式的数据 do { let plistData = try PropertyListSerialization.data(fromPropertyList: convertedArray, format: .xml, options: 0) // 写入文件 try plistData.write(to: plistPath) print("Plist文件已成功生成,路径:\(plistPath)") } catch { print("生成或写入Plist失败:\(error.localizedDescription)") }
代码说明:
- 数据类型转换:遍历原始数组,把
ipport和upsport的Int值转成String,确保生成的Plist里对应标签是<string>。 - 文件路径:这里选择了App的Documents目录作为保存位置,你也可以根据需求换成其他路径。
- 序列化与写入:
PropertyListSerialization.data(fromPropertyList:format:options:)方法负责把数组转成XML格式的Plist数据,然后用write(to:)方法写入到指定路径。
运行这段代码后,生成的Plist文件就会和你给出的Objective-C示例格式完全一致了。
内容的提问来源于stack exchange,提问作者La Ciste
相关产品推荐
相关产品推荐

