swift init属性与自己与否?

时间:2015-09-04 03:24:38

标签: swift

我看到代码来自swift 2.0 init方法,Square是来自NamedShape的子类, 1.我是否需要添加self.property或仅使用self? 2.它是否意味着super.init(name: name)使用self之前的属性,以及之后的属性?

class Square : NamedShape {
    init(sideLength: Double, name: String) {
            self.sideLength = sideLength
            super.init(name: name)
            numberOfSides = 4 //Add self. or not
       }
}

init(sideLengt: Double, name: String) {
        sideLength = sideLengt //without self. , is it right?
        super.init(name: name)
        self.numberOfSides = 4
    }

2 个答案:

答案 0 :(得分:2)

您可以不使用self,但字段变量需要与外部变量不同。

为什么?

简单,字段中的变量是常量语句(letinit(sideLength: Double, name: String) sideLenght,此行中的name是常量变量,因为您无法设置新的价值。

PS。 swift中的let与其他语言中的const相同

实施例

example why can't use same name without self

实现的正确方法是使用self.,因为在这种情况下,我们告诉编译器在我们的类中设置变量。

example using variable with self

其他示例现在设置不带self.的变量,查看下一个图像,我们可以不使用self,因为它在变量之外。

example using name without self

答案 1 :(得分:1)

当您引用self.name在init之外时,您使用关键字name。如果你使用相同的参数“name”作为你的init参数,那么更多的是要认识到你所指的name

这是一个例子

var name : String

init(name : String)//here we have the same name with the value above
{
self.name = name//self.name is the variable outside of the init and now we are making that value the same with the value used in init
}