3 回答
TA贡献2039条经验 获得超7个赞
那没有道理。当我计划返回nil时,为什么要初始化那些属性?
根据Chris Lattner的说法,这是一个错误。他说的是:
这是发行说明中记录的swift 1.1编译器中的实现限制。编译器当前无法在所有情况下销毁部分初始化的类,因此它不允许形成必须这样做的情况。我们认为此错误是在将来的版本中修复的,而不是功能。
资源
编辑:
因此,swift现在是开源的,并且根据此变更日志,现在已在swift 2.2的快照中对其进行了修复。
现在,在对象已完全初始化之前,声明为失败或抛出的指定类初始化器可能分别返回nil或抛出错误。
TA贡献1802条经验 获得超10个赞
我接受Mike S的回答是Apple的推荐,但我认为这不是最佳实践。一个强类型系统的重点是将运行时错误转移到编译时。这种“解决方案”无法达到目的。恕我直言,最好是继续将用户名初始化为"",然后在super.init()之后检查它。如果允许使用空白的用户名,则设置一个标志。
class User: NSObject {
let userName: String = ""
let isSuperUser: Bool = false
let someDetails: [String]?
init?(dictionary: [String: AnyObject]) {
if let user_name = dictionary["user_name"] as? String {
userName = user_name
}
if let value: Bool = dictionary["super_user"] as? Bool {
isSuperUser = value
}
someDetails = dictionary["some_details"] as? Array
super.init()
if userName.isEmpty {
return nil
}
}
}
- 3 回答
- 0 关注
- 486 浏览
添加回答
举报