在 Struct 中使用 "let" - Swift

  • 本文关键字:let Swift Struct swift
  • 更新时间 :
  • 英文 :


我目前正在练习Swift Language iBook中的示例。我对"let"的理解是,我们用"let"来做一个常数。一旦我们给它赋值,就不能再给它赋值了。像下面的代码:

let city="NY"
city="LA"  <--error (Cannot assign 'let' value city)

但我在iBook上看到了这个让我很困惑的例子:

struct Color{
let red=0.0, green=0.0, blue=0.0  //<---declare variables using "let" and assign value
init(red:Double,green:Double,blue:Double){
    self.red=red                  //<---assign value to variable again?
    self.green=green               
    self.blue=blue                
    }
}

在本例中,它已经为使用"let"的红色、绿色和蓝色指定了值。

为什么我们可以在init中再次为这三个变量赋值?

let中的初始化提供默认值,如果您不在构造函数中自己初始化它们。构造函数(init(是特殊的。在它们内部,您可以指定一个常量实例变量。事实上,如果您没有它们的默认值,则必须分配给它们。(这也适用于类。(

感谢Qwerty Bob在文档中找到这一点

初始化期间修改常量属性

您可以在初始化期间的任何点修改常量属性的值,只要在初始化完成时将其设置为确定值即可。

摘录自:苹果股份有限公司"Swift编程语言"iBooks。https://itun.es/us/jEUH0.l

在使用self关键字之前,您可以在初始化过程中设置常量变量。在这之后,它们才是真正的"恒定"。

您必须在使用self关键字之前执行此操作,就像您将其传递给另一个对象一样,它可以反过来调用您的方法,该方法依赖于常量属性

还有:结构是通过值而不是引用传递的,所以在结构中的变量集之后根本不能修改它们。所以let关键字真的很有意义。

如果你在书中给出的例子之后继续阅读几段(除非他们在多个地方使用它(,它实际上会谈论这种行为:

在初始化,只要它在时间之前设置为一个确定的值初始化完成。

因此,基本上您可以修改常量,并且在初始化结束时,所有常量都必须有一个确定的值。它还讨论了这是如何与子类一起工作的:

对于类实例,常量属性只能在由引入它的类初始化。不能修改通过一个子类。

这是它的文档参考(与本书相同(,引用的章节位于"初始化期间修改常量属性"副标题下。

除了Kevin回答的初始化部分外,您仍然缺少let的常量部分。所以澄清let并不是一个常数。

根据"Swift编程语言"苹果股份有限公司,2014-05-27T07:00:00Z。iBooks:

与C一样,Swift使用变量存储值,通过识别名称。Swift还广泛使用了以下变量值不能更改。这些被称为常数比C.中的常数更强大

varlet都是引用,因此letconst引用

class CTest
{
    var str : String = ""
}
let letTest = CTest()
letTest.str = "test" // OK
letTest.str = "another test" // Still OK
//letTest = CTest() // Error
var varTest1 = CTest()
var varTest2 = CTest()
var varTest3 = CTest()
varTest1.str = "var 1"
varTest2.str = "var 2"
varTest3 = varTest1
varTest1.str = "var 3"
varTest3.str // "var 3"

最新更新