gpt4 book ai didi

ios - Swift 中这是什么类型的变量声明

转载 作者:可可西里 更新时间:2023-11-01 00:36:30 25 4
gpt4 key购买 nike

我是 swift 的新手,一直在努力寻找这种实例化的定义,但一直没有成功。我在一个示例项目中看到了类似的东西。这个叫什么?

例子:

var str = "Hello World"

var test: Int {
var testVal = 5

if !str.isEmpty {
testVal = 10
}
return testVal
}

在 XCode playground 中,这将显示 str 的值,但不会显示 test 的值。除非您在新行中键入 test,或者在其他地方使用它。我认为这是一个 autoclosure 的例子,但它有更深思熟虑的语法,并立即运行。

使用快捷语法的自动关闭示例:

var str = "Hello World"

var test: Int = {
var testVal = 5

if !str.isEmpty {
testVal = 10
}
return testVal
}()

后一个示例将立即定义 test,例如,您将在 playground 中看到输出。前者的好处是,对于更复杂的情况,会延迟定义值

最佳答案

您的第一个示例是 ' Computed Property ',每次访问该变量时都会运行闭包。这就是您可以覆盖属性的 getter 和 setter 的方法。在上面的代码中,有一个闭包隐式地将其定义为 setter/getter 。你也可以这样做:

var test: Int {
get {
var testVal = 5

if !str.isEmpty {
testVal = 10
}
return testVal
}
set(value) {
test = value
}
}

您的第二个示例只是定义一个立即执行的闭包。该闭包只会在对象初始化时运行一次。当您想要计算“惰性”属性时,遵循此模式很有用。惰性时,闭包将在首次访问属性时运行一次,而不是在初始化对象时运行一次。

语法看起来很相似,但是计算机属性和惰性属性的思想有细微的差别。请务必注意,计算机属性不能标记为 lazy

关于ios - Swift 中这是什么类型的变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37888357/

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