#Swift 類別
本教程屬於 Swift 系列教程
類別與結構相似,但也有一些關鍵的差異。
使用以下語法定義類別:
class Dog {
}
在類別內部可以定義儲存屬性:
class Dog {
var age = 0
}
類別的定義定義了一個型別。要使用此型別創建新實例,可以使用以下語法:
let roger = Dog()
一旦你有了實例,可以使用點語法來訪問其屬性:
let roger = Dog()
roger.age
相同的點語法用於更新屬性值:
roger.age = 9
一個重要的區別是類別是引用型別,而結構(和列舉)是值型別。
這意味著將一個類別實例賦值給另一個變數不會複製該實例。兩個變數指向同一個實例:
class Dog {
var age = 0
}
let roger = Dog()
let syd = roger
roger.age = 9
//syd.age == 9
這也意味著我們可以使用 let
定義對類別的引用,並且可以更改其屬性,如上面的示例所示。
我們可以創建類別的實例,稱為物件。
與結構一樣,類別可以具有屬性、方法等等。
與結構不同的是,我們 必須 定義一個初始化方法來在創建實例時初始化其值:
class Dog {
var age : Int
init(age: Int) {
self.age = age
}
}
let roger = Dog(age: 9)
只有在有初始化方法時,才能聲明屬性而不初始化它們。
請參閱 self
的使用。我們需要它,因為 age
同時是實例屬性和 init(age:)
方法的參數。 self.age
引用了 age
實例屬性。
類別可以有實例方法:屬於類別實例的函數。
class Dog {
var age = 8
var name = "Roger"
func bark() {
print("\(name): wof!")
}
}
我們還可以有型別方法:
class Dog {
var age = 8
var name = "Roger"
func bark() {
print("\(name): wof!")
}
static func hello() {
print("Hello I am the Dog struct")
}
}
以 Dog.hello()
調用。
類別允許的一個重要特性是繼承。 一個類別可以從另一個類別繼承所有屬性和方法。
假設我們有一個 Animal
類別。每個動物都有一個年齡:
class Animal {
var age: Int
}
並非每一個動物都有一個名字。狗有一個名字。因此我們可以創建一個從 Animal
繼承的 Dog
類別:
class Dog: Animal {
var name: String
}
現在我們必須為這兩個類別添加初始化方法。對於 Dog,完成特定於類別的初始化後,我們可以使用 super.init()
來調用父類初始化方法:
class Animal {
var age: Int
init(age: Int) {
self.age = age
}
}
class Dog: Animal {
var name: String
init(age: Int, name: String) {
self.name = name
super.init(age: age)
}
}
var horse = Animal(age: 8)
var roger = Dog(age: 8, name: "Roger")
Animal
現在是一個超類,Dog
是一個子類。
關於類別還有很多要說,但這是一個很好的入門。