gpt4 book ai didi

swift - 如何正确地在 Swift 中声明一个变量?

转载 作者:IT王子 更新时间:2023-10-29 05:41:36 25 4
gpt4 key购买 nike

我发现在 Swift 中声明变量的这些不同方式非常有趣:

// METHOD 1
var dogName: String = "Charlie"

// METHOD 2
var dogName: String {
return "Charlie"
}

// METHOD 3
let dogName = {
return "Charlie"
}

// METHOD 4
var dogName: String = {
return "Charlie"
}()

很明显,方法 3 声明了一个 let,我们知道其中的区别;但是为什么 Swift 允许方法 4?

这四种方法有什么区别?

我特别困惑方法 2 和方法 4。此外,为什么方法 3 与方法 4 相比失去了最后的括号?

最佳答案

方法 1 是 String 的标准变量声明。它有一个 setter 和一个 getter

var dogName: String = "Charlie"

print(dogName) -> "Charlie"
dogName = "Rex" // Valid

方法二是String类型的计算属性,只读

var dogName: String {
return "Charlie"
}

print(dogName) -> "Charlie"
dogName = "Rex" // Invalid as property is read-only

方法 3 是 () -> String 类型的只读属性,因此基本上是一个 lambda 函数。

let dogName = {
return "Charlie"
}

print(dogName) -> "(Function)"
print(dogName()) -> "Charlie"
dogName = "Rex" // Invalid as property is read-only

方法 4 是一个闭包,将在初始化包含对象时执行。因为它是一个 var 你可以用另一个值替换它

var dogName: String = {
return "Charlie"
}()

print(dogName) -> "Charlie"
dogName = "Rex" // Valid

也就是说,由于方法 4 是一个闭包,您可以在其中执行其他命令。下面是一个示例,您可以在其中使用此构造来初始化 UILabel:

var dogNameLabel: UILabel = {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
label.text = "Charlie"
return label
}()

关于swift - 如何正确地在 Swift 中声明一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45059494/

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