雨燕2.1:获取错误而延长NSObject的
问题描述:
我创造了示例应用程序用于测试failable初始化。当我伸出NSObject的,然后我得到下面的错误。雨燕2.1:获取错误而延长NSObject的
1)属性'self.userName'未在super.init调用时初始化。
2) 不可变值“self.userDetails”可以仅进行一次初始化。
3) 不可变值“self.userName”可以仅进行一次初始化。
请找到下面的代码和屏幕截图是相同的。
class User: NSObject {
let userName: String!
let userDetails: [String]?
init?(dictionary: NSDictionary) {
super.init()
if let value = dictionary["user_name"] as? String {
self.userName = value
}
else {
return nil
}
self.userDetails = dictionary["user_Details"] as? Array
}
}
截图
答
所有属性必须初始化之前super.init()
无必须从failable初始化器super.init()
后返还。这种限制should be removed in Swift 2.2
正确的执行将是:
class User: NSObject {
let userName: String!
let userDetails: [String]?
init?(dictionary: NSDictionary) {
if let value = dictionary["user_name"] as? String {
self.userName = value
} else {
self.userName = nil
}
self.userDetails = dictionary["user_Details"] as? Array
super.init()
if userName == nil {
return nil
}
else if userDetails == nil {
return nil
}
}
}
答
import Foundation
let dictionary = ["user_name": "user", "user_Details":[1,2,3]]
class User: NSObject {
var userName: String?
var userDetails: [String]?
init?(dictionary: NSDictionary) {
super.init()
if let value = dictionary["user_name"] as? String {
self.userName = value
}
else {
return nil
}
self.userDetails = dictionary["user_Details"] as? Array
}
}
let c = User(dictionary: dictionary)
dump(c)
/*
▿ User
▿ Some: User #0
- super: <__lldb_expr_31.User: 0x7fe372f15860>
▿ userName: user
- Some: user
- userDetails: nil
*/
可不可以给其中指出,failable初始化器从2.2迅速删除的链接? –
在2.2将被删除未保释初始化剂,但第二限制 – Silmaril
https://github.com/apple/swift/blob/swift-2.2-SNAPSHOT-2015-12-18-a/CHANGELOG.md – Silmaril