gpt4 book ai didi

swift - 懒惰的 Var 与 Let

转载 作者:IT王子 更新时间:2023-10-29 05:00:24 26 4
gpt4 key购买 nike

我想在 Swift 中对我的一些属性使用延迟初始化。我当前的代码如下所示:

lazy var fontSize : CGFloat = {
if (someCase) {
return CGFloat(30)
} else {
return CGFloat(17)
}
}()

问题是,一旦设置了 fontSize,它就永远不会改变。所以我想做这样的事情:

lazy let fontSize : CGFloat = {
if (someCase) {
return CGFloat(30)
} else {
return CGFloat(17)
}
}()

这是不可能的。

只有这个有效:

let fontSize : CGFloat = {
if (someCase) {
return CGFloat(30)
} else {
return CGFloat(17)
}
}()

所以 - 我想要一个延迟加载但永远不会改变的属性。正确的方法是什么?使用 let 并忘记惰性初始化?还是我应该使用 lazy var 而忘记属性的常量性质?

最佳答案

这是来自Xcode 6.3 Beta / Swift 1.2 release notes的最新经文:

let constants have been generalized to no longer require immediate initialization. The new rule is that a let constant must be initialized before use (like a var), and that it may only be initialized: not reassigned or mutated after initialization.

This enables patterns like:

let x: SomeThing
if condition {
x = foo()
} else {
x = bar()
}

use(x)

which formerly required the use of a var, even though there is no mutation taking place. (16181314)

显然,您不是唯一对此感到沮丧的人。

关于swift - 懒惰的 Var 与 Let,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27886024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com