Swift init不明白

时间:2015-08-06 05:04:00

标签: swift

我不理解= red

struct Color {
    let red, green, blue: Double
    init(red: Double, green: Double, blue: Double) {
        self.red   = red
        self.green = green
        self.blue  = blue
    }
}

3 个答案:

答案 0 :(得分:2)

在您的结构中self.red是一个struct实例,它会在您初始化时获得值。

考虑您在struct

中声明的实例
let red, green, blue: Double

这意味着它们尚未初始化,因此您必须以init()方式启动它:

init(red: Double, green: Double, blue: Double) {
    self.red   = red       //when you will initialise struct self.red will get it's value
    self.green = green     //when you will initialise struct self.green will get it's value
    self.blue  = blue      //when you will initialise struct self.blue will get it's value
}

现在,当您使用struct新变量时,如:

let foo = Color(red: 1.0, green: 1.0, blue: 1.0)

你必须以这种方式给出它的实例值

Color(red: 1.0, green: 1.0, blue: 1.0)

你不能这样初始化它:

let test = Color()

这会给你一个错误。

但请记住:

  

为存储的属性分配默认值或设置其值时   初始化程序中的初始值,设置该属性的值   直接,不要求任何财产观察员。

这意味着如果您以这种方式为struct的实例分配默认值:

struct Color {
    let red : Double = 1.0
    let green : Double = 1.0
    let blue: Double = 1.0
}

您不需要初始化它,因为它们会自动初始化,您可以在没有初始化程序的情况下使用此方法:

let foo = Color()  

它会给你结果{red 1, green 1, blue 1}

您可以通过这种方式为结构实例赋值:

struct Color {
    var red : Double = 1.0
    var green : Double = 1.0
    var blue: Double = 1.0
}

var test = Color()     //{red 1, green 1, blue 1}
test.red = 2.0         //{red 2, green 1, blue 1}
test.green = 2.0       //{red 2, green 2, blue 1}
test.blue = 2.0        //{red 2, green 2, blue 2}

答案 1 :(得分:0)

Swift 中的结构(struct)与Class的行为非常相似,并且可以包含方法,例如初始值设定项。

执行实例方法时,self引用该实例。

除此之外,请参阅Apple Swift文档。

答案 2 :(得分:0)

变量红色,绿色和蓝色在结构中声明。并且您正尝试在init方法中访问它们。

所以self.red引用该特定结构对象的实例变量。

例如,如果您创建两个Color结构实例

var color1 = Color(26,120,180);
var color2 = Color(160,120,180);
println(color1.red);//will print 26
println(color2.red);//will print 160

在上面的例子中:

第1行:它会调用init()方法来初始化此方法中的结构调用self指的是结构Color的实例color1。

第2行:它会调用init()方法初始化此方法中的结构调用self指的是结构Color的实例color2。

数据封装

希望很清楚。如果有任何疑问,请告诉我。