swift中的self.name = name。我不明白为什么需要这些代码

时间:2017-08-07 00:40:33

标签: swift init

class person {
    var name : String 

    init(name: String) {
        self.name = name 
    }
}

我正在学习Swift课程章节

我不明白为什么需要init(name:String) self.name = name代码 这段代码的目的是什么。

我宣布var name: String 再次init(name: String),为什么需要self.name = name

var nameself.name = name之间的区别是什么?

2 个答案:

答案 0 :(得分:3)

查看名为变量范围的内容。在您的代码中 - 有两个“名称变量 - 一个类(或实例)变量和init中的”参数。

后者 - init(name:)仅在您的初始化函数中使用 ,这意味着实例具有 no 名称而没有self.name = name我创建了实例。

前者可用于实例 - 只要您的类person的实例是。

进一步解释,试试这个。将您的代码更改为:

class Person {
    var myName : String
    var myOtherName : String 

    init(name: String) {
        self.myName = name
    }
}

在您的应用或视图控制器中,执行以下操作:

let myPerson = Person(name: "john")
print(myPerson.myName)       // prints "jihoon"
print(myPerson.myOtherName)  // prints nothing
print(myPerson.name)         // generates a build error because name doesn't exist

最后一个注意事项 - 在Swift类名中大写,因此最佳名称是Person,而不是person

答案 1 :(得分:0)

Classesstructures必须在创建该类或结构的实例时将其所有存储的属性设置为适当的初始值。存储的属性不能保留在不确定的状态。

class person {
    var name : String // undetrmined state
    init(name: String) {
        self.name = name
    }
}
class person2 {
    var name : String = "default value" // detrmined state
    // Now these intializer are not optional. You can use these initializer or not.
    init(name: String) {
        self.name = name
    }
    init() {
    }
}
// Aother example for optional stored property
class person3 {
    var name : String?  // detrmined state, because default value for optional is nil
    // Now these intializer are not optional. You can use these initializer or not.
    init(name: String) {
        self.name = name
    }
    init() {
    }
}

有关详细信息,请阅读此Apple Doc