【发布时间】:2015-11-23 20:44:54
【问题描述】:
如何为符合 NSCoding 协议的类实现可失败的初始化程序?
我收到以下错误:
1. 行override init() {}:属性“self.videoURL”未在隐式生成的 super.init 调用中初始化
2.return nil行:类实例的所有存储属性必须在从初始化器返回nil之前初始化
我已经看到 Best practice to implement a failable initializer 和 All stored properties of a class instance must be initialized before returning nil 对我有很大帮助,但是由于我的类也符合 NSCoding 协议,所以我不知道如何在我的情况下实现可失败的初始化程序。
关于如何实现可失败初始化器的任何建议?
class CustomMedia : NSObject, NSCoding {
var videoTitle: String?
let videoURL: NSURL!
override init() {}
init?(title: String?, urlString: String) {
// super.init()
if let url = NSURL(string: urlString) {
self.videoURL = url
self.videoTitle = title
} else {
return nil
}
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.videoTitle, forKey: PropertyKey.videoTitle)
aCoder.encodeObject(self.videoURL, forKey: PropertyKey.videoURL)
}
required init(coder aDecoder: NSCoder) {
videoTitle = aDecoder.decodeObjectForKey(PropertyKey.videoTitle) as? String
videoURL = aDecoder.decodeObjectForKey(PropertyKey.videoURL) as! NSURL
}
}
【问题讨论】:
-
你为什么要做
override init() {}? -
@DanVanWinkle 我已经看到它在其他示例中以这种方式实现以符合 NSCoding 并且它没有导致任何错误。太好了,我已将其注释掉,第一个错误消失了。
标签: swift