在Swift 4語言中,與特定型別關聯的函式稱為「方法」。 在Objective C中,類用於定義方法,而Swift 4語言為使用者提供了為類,結構體和列舉也提供方法,提高了靈活性。
在Swift 4語言中,通過範例方法存取類,結構體和列舉範例。
範例方法提供功能 -
可以在{}
花括號內寫入範例方法。 它具有對型別範例的方法和屬性的隱式存取。 當呼叫該型別的特定範例時,它將存取特定範例。
語法
func funcname(Parameters) -> returntype {
Statement1
Statement2
---
Statement N
return parameters
}
範例程式碼
class calculations {
let a: Int
let b: Int
let res: Int
init(a: Int, b: Int) {
self.a = a
self.b = b
res = a + b
}
func tot(c: Int) -> Int {
return res - c
}
func result() {
print("Result is: \(tot(c: 20))")
print("Result is: \(tot(c: 50))")
}
}
let pri = calculations(a: 600, b: 300)
pri.result()
當使用playground 執行上述程式時,得到以下結果 -
Result is: 880
Result is: 850
Calculations
類定義了兩個範例方法 -
init()
方法定義為新增兩個數位a
和b
並將其儲存在結果res
中tot()
方法用於從傳遞c
值中減去res
最後,使用a
和b
的值列印calculations
方法。 使用點語法.
存取範例方法。
Swift 4函式描述了它們變數的區域性宣告和全域性宣告。 類似地,Swift 4方法命名約定也類似於Objective C的命名約定。但是函式和方法的區域性和全域性引數名稱宣告的特徵是不同的。 Swift 4中的第一個引數由介詞名稱參照為:with
,for
和by
,以便於存取命名約定。
Swift 4通過將第一個引數名稱宣告為區域性引數名稱,而其餘引數名稱為全域性引數名稱,提供了方法的靈活性。 這裡no1
由Swift 4方法宣告為區域性引數名稱。 no2
用於全域性宣告並通過程式存取。
class division {
var count: Int = 0
func incrementBy(no1: Int, no2: Int) {
count = no1 / no2
print(count)
}
}
let counter = division()
counter.incrementBy(no1: 1800, no2: 3)
counter.incrementBy(no1: 1600, no2: 5)
counter.incrementBy(no1: 11000, no2: 3)
當使用playground 執行上述程式時,得到以下結果 -
600
320
3666
即使Swift 4方法為本地宣告提供了第一個引數名稱,使用者也可以修改從區域性宣告到全域性宣告的引數名稱。 這可以通過在#
符號前加上第一個引數名稱來完成。 通過這樣做,可以在整個模組中全域性存取第一個引數。
當使用者需要使用外部名稱存取後續引數名稱時,將使用_
符號覆蓋方法名稱。
class multiplication {
var count: Int = 0
func incrementBy(no1: Int, no2: Int) {
count = no1 * no2
print(count)
}
}
let counter = multiplication()
counter.incrementBy(no1: 800, no2: 3)
counter.incrementBy(no1: 100, no2: 5)
counter.incrementBy(no1: 15000, no2: 3)
當使用playground 執行上述程式時,得到以下結果 -
2400
500
45000
方法對所有已定義的型別範例都有一個self
的隱式屬性。Self
屬性用於參照其定義方法的當前範例。參考以下範例程式碼 -
class calculations {
let a: Int
let b: Int
let res: Int
init(a: Int, b: Int) {
self.a = a
self.b = b
res = a + b
print("Inside Self Block: \(res)")
}
func tot(c: Int) -> Int {
return res - c
}
func result() {
print("Result is: \(tot(c: 20))")
print("Result is: \(tot(c: 50))")
}
}
let pri = calculations(a: 600, b: 300)
let sum = calculations(a: 1200, b: 300)
pri.result()
sum.result()
當使用playground 執行上述程式時,得到以下結果 -
Inside Self Block: 900
Inside Self Block: 1500
Result is: 880
Result is: 850
Result is: 1480
Result is: 1450
在Swift 4中,語言結構和列舉屬於值型別,不能通過其範例方法進行更改。 但是,Swift 4語言提供了通過「變異」行為修改值型別。 mutating
將在範例方法中進行任何更改,並在執行方法後返回到原始形式。 此外,通過self
屬性,為隱式函式建立新範例,並在執行後替換現有方法。
參考以下範例程式碼 -
struct area {
var length = 1
var breadth = 1
func area() -> Int {
return length * breadth
}
mutating func scaleBy(res: Int) {
length *= res
breadth *= res
print(length)
print(breadth)
}
}
var val = area(length: 3, breadth: 5)
val.scaleBy(res: 3)
val.scaleBy(res: 30)
val.scaleBy(res: 300)
當使用playground 執行上述程式時,得到以下結果 -
9
15
270
450
81000
135000
變異方法與self
屬性相結合,為定義的方法分配一個新範例。參考以下範例程式碼 -
struct area {
var length = 1
var breadth = 1
func area() -> Int {
return length * breadth
}
mutating func scaleBy(res: Int) {
self.length *= res
self.breadth *= res
print(length)
print(breadth)
}
}
var val = area(length: 3, breadth: 5)
val.scaleBy(res: 13)
當使用playground 執行上述程式時,得到以下結果 -
39
65
當呼叫方法的特定範例時,它被稱為範例方法; 當方法呼叫特定型別的方法時,它被稱為「型別方法」。 「類」的型別方法由func
關鍵字定義,結構體和列舉型別方法在func
關鍵字之前使用static
關鍵字定義。
型別方法由操作符.
呼叫和存取。 而不是呼叫特定範例來呼叫這個方法。
class Math {
class func abs(number: Int) -> Int {
if number < 0 {
return (-number)
} else {
return number
}
}
}
struct absno {
static func abs(number: Int) -> Int {
if number < 0 {
return (-number)
} else {
return number
}
}
}
let no = Math.abs(number: -35)
let num = absno.abs(number: -5)
print(no)
print(num)
當使用playground 執行上述程式時,得到以下結果 -
35
5