Swift 方法
在 Swift 中特定類型的相關聯功能被稱爲方法。在 Objective C 中類是用來定義方法,其中作爲 Swift 語言爲用戶提供了靈活性,類,結構和枚舉中可以定義使用方法。
實例方法
在 Swift 語言,類,結構和枚舉實例通過實例方法訪問。
實例方法提供的功能
訪問和修改實例屬性
函數關聯實例的需要
實例方法可以寫在花括號 {} 內。它隱含的訪問方法和類實例的屬性。當該類型指定具體實例它調用獲得訪問該特定實例。
語法
func funcname(Parameters)-> returntype
{Statement1Statement2---Statement N
return parameters
}
示例
class calculations {let a:Intlet b:Intlet 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(){
println("Result is: \\(tot(20))")
println("Result is: \\(tot(50))")}}let pri \= calculations(a:600, b:300)
pri.result()
當我們使用 playground 運行上面的程序,得到以下結果
Result is: 880
Result is: 850
Calculations 類定義了兩個實例方法:
init() 被定義爲兩個數 a 和 b 相加,並將其結果存儲在'res'
tot() 用於通過從 「res」 值減去 'c'
最後,調用打印的計算a和b的值方法. 實例方法以 "." 語法訪問
局部和外部參數名稱
Swift 函數描述了局部和全局變量聲明。同樣,Swift 方法的命名規則也類似 Objective C。但是局部和全局參數名稱聲明的特性對於函數和方法不同。 swift 第一個參數是由介詞名稱'with', 'for' 和 'by' 訪問命名規則。
Swift 提供聲明作爲局數參數名稱,其它參數名稱爲全局參數名,第一參數是方法名稱。在這裏,「no1」方法作爲局部參數名來聲明。 'no2' 用於全局聲明,並通過該程序訪問。
class division {var count:Int=0
func incrementBy(no1:Int, no2:Int){
count = no1 / no2
println(count)}}let counter = division()
counter.incrementBy(1800, no2:3)
counter.incrementBy(1600, no2:5)
counter.incrementBy(11000, no2:3)
當我們使用 playground 運行上面的程序,得到以下結果
600
320
3666
外部參數名稱使用 # 和 _ 符號
儘管 Swift 方法提供第一個參數名稱作爲局部聲明,用戶必須提供以修改參數名稱從局部到全局聲明。這可以通過'#'符號前綴使用第一參數名來完成。通過這樣做,第一參數可以作爲全局在整個模塊訪問。
當用戶需要使用外部名稱訪問在後面的參數名中,方法的名字使用「_」符號覆蓋。
class multiplication {var count:Int=0
func incrementBy(#no1:Int, no2:Int){
count = no1 * no2
println(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:Intlet b:Intlet res:Int
init(a:Int, b:Int){self.a \= a
self.b \= b
res \= a + b
println("Inside Self Block: \\(res)")}
func tot(c:Int)\->Int{return res \- c
}
func result(){
println("Result is: \\(tot(20))")
println("Result is: \\(tot(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 語言結構和枚舉和值類型不能由它的實例方法來改變。然而,swift 語言通過「變異」行爲提供了靈活修改值類型。突變將使得在實例方法中的任何變化,將方法執行之後變化返回到原來的形式。此外,由 「selft」 屬性的新實例其隱式函數創建,執行之後將取代現有的方法
struct area {var length =1var breadth =1
func area()\->Int{return length \* breadth
}
mutating func scaleBy(res:Int){
length \*= res
breadth \*= res
println(length)
println(breadth)}}var val \= area(length:3, breadth:5)
val.scaleBy(3)
val.scaleBy(30)
val.scaleBy(300)
當我們使用 playground 運行上面的程序,得到以下結果
9
15
270
450
81000
135000
Self 屬性的不同誘變方法
突變方法結合 「self」 屬性分配給新實例所定義的方法。
struct area {var length =1var breadth =1
func area()\->Int{return length \* breadth
}
mutating func scaleBy(res:Int){self.length \*= res
self.breadth \*= res
println(length)
println(breadth)}}var val \= area(length:3, breadth:5)
val.scaleBy(13)
當我們使用 playground 運行上面的程序,得到以下結果
39
65
類型方法
當方法的特定實例調用,它調用一個實例方法並且當方法調用特定類型的方法的一個被定義爲 "類型方法「。類型方法 「類」 是由「func」關鍵字和結構定義,和枚舉型方法使用 「func」 關鍵字之前的「static」關鍵字定義。
類型方法調用,是通過訪問 '.' 而不是調用特定實例的方法,例子和語法如下:
classMath{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
}}}letno=Math.abs(-35)let num = absno.abs(-5)
println(no)
println(num)
當我們使用 playground 運行上面的程序,得到以下結果
35
5