雨燕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 
    }   
} 

截图

enter image description here

所有属性必须初始化之前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 
     } 
    } 
} 
+0

可不可以给其中指出,failable初始化器从2.2迅速删除的链接? –

+0

在2.2将被删除未保释初始化剂,但第二限制 – Silmaril

+0

https://github.com/apple/swift/blob/swift-2.2-SNAPSHOT-2015-12-18-a/CHANGELOG.md – Silmaril

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 
*/