properties – “无法赋值给该表达式的结果” – 如何设置可选变
发布时间:2020-12-14 04:32:39 所属栏目:百科 来源:网络整理
导读:我有一个关于 Swift和可选属性的问题. 假设我有以下代码: import Foundationclass MyClass: NSObject { var parent: MyClass? var string: String? init() { super.init() }}let variable : MyClass = MyClass()variable.string = "variable"variable.paren
我有一个关于
Swift和可选属性的问题.
假设我有以下代码: import Foundation class MyClass: NSObject { var parent: MyClass? var string: String? init() { super.init() } } let variable : MyClass = MyClass() variable.string = "variable" variable.parent?.string = "parent" 我在下面的行中收到错误,说“无法分配给这个表达式的结果” variable.parent?.string = "parent" 现在,我可以通过用感叹号替换问号来抑制这个错误,据我所知,这使得Swift认为一个对象将在运行时存在,但它会崩溃,因为显然没有一个对象. 基本上,如何在不执行“if variable.parent”之类的操作的情况下在可选变量上设置属性? 解决方法
您无法在不存在的父级中分配字符串.你将如何避免这种情况取决于你.有一点可以肯定,要么你要确保父绑定(比如在一些init()方法中绑定它),要么每次都必须使用if variable.parent(即使你不想这样)或者你必须定义一个像assignParentString()这样的方法,用于检查父项.
func assignParentString (string: String) { if let parent = self.parent { parent.string = string } } 例如: 3> class MyClass { 4. var parent : MyClass? 5. var name : String? 6. func aps (name:String) { 7. if let parent = self.parent { 8. parent.name = name 9. } 10. } 11. } 12> var mc = MyClass() mc: MyClass = { parent = nil name = nil } 13> mc.name = "mc" 14> mc.aps ("mcp") // no error,name did not take 15> mc $R3: MyClass = { parent = nil name = "mc" } 16> mc.parent = MyClass() 17> mc.aps ("mcp") 18> mc $R6: MyClass = { parent = Some { parent = nil name = "mcp" } name = "mc" } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |