self.name = 斯威夫特中的名称。我不明白为什么需要这些代码

  • 本文关键字:明白 代码 name self swift init
  • 更新时间 :
  • 英文 :

class person {
var name : String 
init(name: String) {
self.name = name 
}
}

我正在学习斯威夫特课程章节

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

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

只有var nameself.name = name有什么区别?

查看称为变量范围的东西。在您的代码中 - 有两个"名称变量 - 一个类(或实例(变量和一个"init中的参数。

后者 - 仅在初始化函数中使用init(name:),这意味着一旦您创建了实例,实例就没有名称,没有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

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() {
}
}

欲了解更多信息,请阅读这个苹果文档

最新更新