ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## CLASSES 通过 class 关键字定义一个类: ~~~ class Person { var clothes: String var shoes: String } ~~~ 但是上面有个问题,Swift 不允许创建未被正确初始化的变量。解决方法有三种: 1. 将这两个变量定义为 Optional。(这会致使代码中出现大量不必要的 Optional 类型) 2. 给变量附上一个初始值。(这行得通,但这有点浪费,除非这个初始值一定会被使用) 3. 自己写一个初始化方法。(最佳) 通过创建一个 init() 方法来实现自定义初始化方法: ~~~ class Person { var clothes: String var shoes: String init(clothes: String, shoes: String) { self.clothes = clothes self.shoes = shoes //init方法不需要添加 func 关键字 } } ~~~ 实例化一个类: ~~~ var taylor = Person(name: "Taylor", age: 25) ~~~ 继承一个类: ~~~ class Singer: Person { } ~~~ 在 Swift 中,想要在继承类(子类)中覆盖父类的方法,需要使用 override 关键字: class Singer: Person { override func sing() { print(“Trucks, girls, and liquor”) } } 通过 super 关键字调用父类方法: ~~~ init(name: String, age: Int, noiseLevel: Int) { self.noiseLevel = noiseLevel super.init(name: name, age: age) } ~~~ * 在 Swift 中,类和结构体有点相似,都可以拥有属性和方法,区别在于结构体是值拷贝,这意味着改变拷贝值不会改变原来的值,而类是指针拷贝,拷贝的变量会指向相同的实例,见下例: ~~~ // Value type example struct S { var data: Int = -1 } var a = S() var b = a // a is copied to b a.data = 42 // Changes a, not b println("\(a.data), \(b.data)") // prints "42, -1" // Reference type example class C { var data: Int = -1 } var x = C() var y = x // x is copied to y x.data = 42 // changes the instance referred to by x (and y) println("\(x.data), \(y.data)") // prints "42, 42" ~~~