在 Swift 中特定類型的相關(guān)聯(lián)功能被稱為方法。在 Objective C 中類是用來定義方法,其中作為 Swift 語言為用戶提供了靈活性,類,結(jié)構(gòu)和枚舉中可以定義使用方法。
在 Swift 語言,類,結(jié)構(gòu)和枚舉實(shí)例通過實(shí)例方法訪問。
實(shí)例方法提供的功能
訪問和修改實(shí)例屬性
函數(shù)關(guān)聯(lián)實(shí)例的需要
實(shí)例方法可以寫在花括號(hào) {} 內(nèi)。它隱含的訪問方法和類實(shí)例的屬性。當(dāng)該類型指定具體實(shí)例它調(diào)用獲得訪問該特定實(shí)例。
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()
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
Result is: 880 Result is: 850
Calculations 類定義了兩個(gè)實(shí)例方法:
init() 被定義為兩個(gè)數(shù) a 和 b 相加,并將其結(jié)果存儲(chǔ)在'res'
tot() 用于通過從 “res” 值減去 'c'
最后,調(diào)用打印的計(jì)算a和b的值方法. 實(shí)例方法以 "." 語法訪問
Swift 函數(shù)描述了局部和全局變量聲明。同樣,Swift 方法的命名規(guī)則也類似 Objective C。但是局部和全局參數(shù)名稱聲明的特性對(duì)于函數(shù)和方法不同。 swift 第一個(gè)參數(shù)是由介詞名稱'with', 'for' 和 'by' 訪問命名規(guī)則。
Swift 提供聲明作為局?jǐn)?shù)參數(shù)名稱,其它參數(shù)名稱為全局參數(shù)名,第一參數(shù)是方法名稱。在這里,“no1”方法作為局部參數(shù)名來聲明。 '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)
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
600 320 3666
盡管 Swift 方法提供第一個(gè)參數(shù)名稱作為局部聲明,用戶必須提供以修改參數(shù)名稱從局部到全局聲明。這可以通過'#'符號(hào)前綴使用第一參數(shù)名來完成。通過這樣做,第一參數(shù)可以作為全局在整個(gè)模塊訪問。
當(dāng)用戶需要使用外部名稱訪問在后面的參數(shù)名中,方法的名字使用“_”符號(hào)覆蓋。
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)
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
2400 500 45000
方法有一個(gè)隱式屬性被稱為“self”,所有定義的類型實(shí)例所都有。“self”屬性被用于表示當(dāng)前的實(shí)例定義的方法。
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()
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
Inside Self Block: 900 Inside Self Block: 1500 Result is: 880 Result is: 850 Result is: 1480 Result is: 1450
在 Swift 語言結(jié)構(gòu)和枚舉和值類型不能由它的實(shí)例方法來改變。然而,swift 語言通過“變異”行為提供了靈活修改值類型。突變將使得在實(shí)例方法中的任何變化,將方法執(zhí)行之后變化返回到原來的形式。此外,由 “selft” 屬性的新實(shí)例其隱式函數(shù)創(chuàng)建,執(zhí)行之后將取代現(xiàn)有的方法
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)
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
9 15 270 450 81000 135000
突變方法結(jié)合 “self” 屬性分配給新實(shí)例所定義的方法。
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)
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
39 65
當(dāng)方法的特定實(shí)例調(diào)用,它調(diào)用一個(gè)實(shí)例方法并且當(dāng)方法調(diào)用特定類型的方法的一個(gè)被定義為 "類型方法“。類型方法 “類” 是由“func”關(guān)鍵字和結(jié)構(gòu)定義,和枚舉型方法使用 “func” 關(guān)鍵字之前的“static”關(guān)鍵字定義。
類型方法調(diào)用,是通過訪問 '.' 而不是調(diào)用特定實(shí)例的方法,例子和語法如下:
classMath{class func abs(number:Int)->Int{if number <0{return(-number)}else{return number }