作者genesic (嗯?)
看板MacDev
标题[问题] 想把一个Dictionary强制转型成AnyObject
时间Sat Apr 23 22:44:21 2016
我目前在做练习的专案
想做的事情是这样:
在view上操作完之後要把detail存起来
在下次打开app的时候可以显示最後操作的画面
我google的结果是要用NSUserDefaults的setObject来储存
不过setObject只能储存特定格式的object,所以Account里面的变数要encode
但在encodeWithCoder里要把detail转型成AnyObject时一直失败
(var detail = [NSDate: [Detail]]() )
我想请问要把像detail这样的结构转成AnyObject该怎麽转呢?
如果没有办法转的话,有什麽其他替代的方法可以做到我想要的结果吗?
简码如下,如果有什麽不清楚的地方请告诉我,我会再补充,感谢
Struct Detail {
var name: String
var num: Int
}
Class Account: NSOBject, NSCoding {
var detail = [NSDate : [Detail]]()
required init?(coder aDecoder: NSCoder) {
let decodeObj = aDecoder.decodeObjectForKey("detail")
if let object = decodeObj as? [NSDate: [AccountDetail]] {
detail = object
}
}
func encodeWithCoder(aCoder: NSCoder) {
if let object = detail as? AnyObject { // 这个if一直不会进来
aCoder.encodeObject(object , forKey: "detail")
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.231.4.77
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MacDev/M.1461422663.A.AB3.html
※ 编辑: genesic (61.231.4.77), 04/23/2016 22:46:26
1F:→ itisjoe: 改用 Any 04/23 23:18
2F:→ itisjoe: AnyObject 只能用在 Class 的 instance 上 04/23 23:20
3F:推 johnlinvc: Dictionary 是Struct 不是 Object 04/23 23:45
4F:→ genesic: 感谢回答,我刚试了一下,看来要直接对dictionary做 04/24 00:21
5F:→ genesic: encodeObject是不太可能了,我刚试了用Any就被compiler挡 04/24 00:21
6F:→ genesic: 下,我来转成json试试好了,感谢 04/24 00:22
7F:→ uranusjr: 从 Objective-C 起 dictionary 和 array 就需要特别处里 04/24 01:17
8F:→ uranusjr: ObjC 是用 NSKeyedArchiver, Swift 就不知道了 04/24 01:17
9F:→ uranusjr: 但 ObjC 都可以了, Swift 应该没理由直接 encode 才是 04/24 01:18