let src = json as NSDictionarylet documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]let path = documentsURL.appendingPathComponent("one.plist")let result = src.write(to: path, atomically: false)print(result, path)
生效了,
写入失败,
为什么?
当然不是代码的问题,是数据的问题
数据长这样
json:{ "message" : "", "code" : 200, "state" : null, "data" : { "author" : "", "next_id" : 409, "title" : "2 金木水火土", "prev_id" : 405, "list" : [ { "string" : "识字", "type" : 0 }, { "string" : "一: 一个 一群", "type" : 1, "pronounce" : "yī" } ], "nodes" : { "wav_lengths" : [ 0, 4.0049999999999999, 8.2509999999999994 ], "node" : [ { "index" : 0, "title" : "识字" } ] }, "audio" : "http://ss-cn.aliyuncs.com/chinese_audio%2F%E9%83%A8%E7%BC%96%E7%89%88%E8%AF%AD%E6%96%87%E5%85%AD%E4%B8%89%E5%88%B6%2F%E4%B8%80%E5%B9%B4%E7%BA%A7%E4%B8%8A%E5%86%8C%2Faudio%2F%E8%AF%86%E5%AD%972.wav?OSSAccessKeyId=LTAIQ8Lif1HHVkXd&Expires=1606364958&Signature=XC%2Fm%2BLKZ30b%2FVYCsXrwCaNj6nZI%3D" }}
数据是字典,但不合乎 plist 的标准
{ "string" : "识字", "type" : 0 }, { "string" : "一: 一个 一群", "type" : 1, "pronounce" : "yī" }
list 外面是数组,数组装字典,
一个字典三个键,一个字典两个键,
所以呵呵
批改代码:
let resp = try Base.decoder.decode(GeneralSingle<P_intelligence>.self, from: data) var newPlistModel = resp var i = 0 let count = resp.data.list.count while i < count{ if resp.data.list[i].pronounce == nil{ newPlistModel.data.list[i].pronounce = "hehe " } i += 1 } let json = newPlistModel.data.dictionary let src = json as NSDictionary let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let path = documentsURL.appendingPathComponent("one.plist") let result = src.write(to: path, atomically: false) print(result, path)
对应的模型:
struct P_intelligence: Codable { let listen: String let see: Node_intelligence var list: [Moron] let title: String let pre: Int let next: Int let author: String? private enum CodingKeys : String, CodingKey { case listen = "audio", see = "nodes" case list, title, pre = "prev_id" case next = "next_id", author } var dictionary: [String: Any] { return (try? JSONSerialization.jsonObject(with: JSONEncoder().encode(self))) as? [String: Any] ?? [:] }}struct Moron: Codable { let string: String let type: Int var pronounce: String?}// ......