swift – 每次访问时都会计算计算属性吗?
我有两个关于
Swift计算属性的问题.
是否每次访问计算属性时都会对其进行评估?或者它们存储在某个地方以供将来访问? 这是什么类型的财产,因为我无法谷歌: let navigationController: UINavigationController = { var navigator = UINavigationController() navigator.navigationBar.translucent = false return navigator }() 每次访问时都会评估它吗?
那不是计算属性.
let navigationController: UINavigationController = { var navigator = UINavigationController() navigator.navigationBar.translucent = false return navigator }() 它只是一个存储的属性,填充了此代码块返回的值的结果. var navigator = UINavigationController() navigator.navigationBar.translucent = false return navigator 在实例化类的实例时执行该块.只有一次. 写这个 struct Person { let name: String = { let name = "Bob" return name }() // <- look at these } 相当于此 struct Person { let name: String init() { self.name = "Bob" } } 恕我直言,第一种方法更好,因为: >它确实允许您在同一“空间”中声明和填充属性 注意#1:在属性中存储闭包 正如dfri在下面的评论中指出的那样,代码块以()结尾.这意味着将评估代码并将结果分配给属性. 另一方面,如果我们删除块末尾的(),我们会得到一些不同的东西,实际上不会对块进行求值. 使用正确的语法,我们可以在属性中放置一个闭包. struct Person { let sayHello: ()->() = { print("Hello") } } 现在我们有一个sayHello属性,它包含一个闭包.闭包接收0参数并返回Void. let bob = Person() bob.sayHello // this does NOT execute the code inside closure bob.sayHello() // this does execute the code in the closure and does print the message 注意#2:让我们谈谈计算属性 所以我们明确表示这个问题中的代码不是计算属性. 在下面的示例中,我创建了一个Computed Property时代.正如您每次调用它时所看到的那样,块中的代码也会被执行. 计算财产的例子(年龄) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |