在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
的隱式屬性。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屬性
變異方法與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