在Swift 2中设置多个类属性时保护
发布时间:2020-12-14 04:56:56 所属栏目:百科 来源:网络整理
导读:做这样的事情是微不足道的: class Collection { init(json: [String: AnyObject]){ guard let id = json["id"] as? Int,name = json["name"] as? String else { print("Oh noes,bad JSON!") return } }} 在那种情况下,我们使用let来初始化局部变量.但是,将
做这样的事情是微不足道的:
class Collection { init(json: [String: AnyObject]){ guard let id = json["id"] as? Int,name = json["name"] as? String else { print("Oh noes,bad JSON!") return } } } 在那种情况下,我们使用let来初始化局部变量.但是,将其修改为使用类属性会导致它失败: class Collection { let id: Int let name: String init(json: [String: AnyObject]){ guard id = json["id"] as? Int,bad JSON!") return } } } 它抱怨需要使用let或var,但显然情况并非如此.在Swift 2中执行此操作的正确方法是什么? 解决方法
在if let中,您将可选的值作为新的局部变量展开.您无法展开现有变量.相反,你必须打开,然后分配即
class Collection { let id: Int let name: String init?(json: [String: AnyObject]){ // alternate type pattern matching syntax you might like to try guard case let (id as Int,name as String) = (json["id"],json["name"]) else { print("Oh noes,bad JSON!") self.id = 0 // must assign to all values self.name = "" // before returning nil return nil } // now,assign those unwrapped values to self self.id = id self.name = name } } 这不是特定于类属性 – 您不能有条件地绑定到任何变量,例如这不起作用: var i = 0 let s = "1" if i = Int(s) { // nope } 相反,你需要做: if let j = Int(s) { i = j } (当然,在这种情况下你最好让我i = Int(s)?? 0) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |