over 6 years ago
Methods
Methods 其實就是跟特定型別有相關的 functions。
實體 methods
宣告方法與 functions 相同。
class MyClass {
func myFunc(para: Int) -> Int {
return para
}
}
let c = MyClass()
c.myFunc(para:123)
self
每個 instance 都有 self 這個 property,代表這個實體本身。
class MyClass {
var para = 1
func myFunc() -> Int {
return self.para
}
}
在上述的情況下,不需要特別寫 self,因為 Swift 會假設是 instance 的變數。
但在下述情況,就需要使用 self 來區分。
class MyClass {
var para = 1
func myFunc(para: Int) -> Int {
return self.para + para
}
}
在實體變數內修改 property
class MyClass {
var para = 1
func myFunc() {
para = 2
}
}
上述在 class 內可以執行,但因為 struct 跟 enumeration 是 value type,
所以不能夠直接在 method 內修改 property,若要這樣做,必須加上 mutating。
struct MyStruct {
var para = 1
mutating func myFunc() {
para = 2
}
}
在 method 內指定 self
在 mutating method 內,可以建立新的 instance 並給予 self 來取代原本的 instance。
struct MyStruct {
mutating func myFunc() {
self = MyStruct()
}
}
Methods 類型
Classes 可使用 class,structures 或是 enumerations 可使用 static,透過型別來呼叫而非實體。
class MyClass {
class func myFunc() {
}
}
MyClass.myFunc()
struct MyStruct {
static func myFunc() {
}
}
MyStruct.myFunc()
Subscripts
在 classes, structures 與 enumerations 中可以定義 subscripts,
目的是透過簡潔的方法去對 collection element 讀取或賦予值。
class MyClass {
var array = [1,2,3,4]
subscript(index: Int) -> Int {
get {
if index >= array.count {
return 0
}
return array[index]
}
set {
if index >= array.count {
array.append(newValue)
return
}
array.insert(newValue, at:index)
}
}
}
let c = MyClass()
c[3] = 123
print(c[0])