使用"让"里面的结构 - 斯威夫特

时间:2014-06-26 14:34:56

标签: swift

我目前正在练习Swift Language iBook的例子。我的理解"让"是我们使用"让"做一个常数。一旦我们为它赋值,我们就不能再为它分配另一个值。如下面的代码:

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                
    }
}

在此示例中,它已将值分配给红色,绿色和蓝色,使用&#34; let&#34;。

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

5 个答案:

答案 0 :(得分:11)

如果您没有在构造函数中自己初始化它们,let中的初始化将提供默认值。 构造函数(init)很特别。在它们内部,您可以分配一个常量实例变量。实际上,如果您没有默认值,则必须分配给它们。 (这也适用于课程。)

感谢Qwerty Bob在文档中找到这个

  

在初始化期间修改常量属性

     

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

摘自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/us/jEUH0.l

答案 1 :(得分:5)

您可以在init过程中使用self关键字之前设置常量变量。在此之后,他们真正“恒定”。

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

答案 2 :(得分:1)

如果您继续阅读本书中给出的示例之后的几段(除非他们在多个位置使用它),它实际上会讨论这种行为:

  

您可以在任何时候修改常量属性的值   初始化,只要它按时间设置为一个确定的值   初始化完成。

所以基本上你可以修改常量,在结束初始化时,所有常量都必须有一个确定的值。它还继续讨论它如何与子类一起工作:

  

对于类实例,只能在期间修改常量属性   由引入它的类初始化。它无法修改   由子类。

以下是doc reference(与本书相同),引用的部分位于&#34;初始化期间修改常量属性&#34;副标题。

答案 3 :(得分:1)

并且:结构通过值而不是通过引用传递,因此在设置之后根本不能修改结构中的变量。所以let关键字真的很有意义。

答案 4 :(得分:0)

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

根据“The Swift Programming Language”.Apple Inc.,2014-05-27T07:00:00Z。 iBooks的:

  

与C一样,Swift使用变量来存储,并使用引用来表示值   识别名称。 Swift还广泛使用其变量   值无法更改。这些被称为常数,并且很多   比C中的常量更强大。

varlet都是引用,因此let const引用。 使用基本类型并不能真正显示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"