Swift 方法

Swift 方法是與某些特定類型相關(guān)聯(lián)的函數(shù)

在 Objective-C 中撕氧,類是唯一能定義方法的類型。但在 Swift 中估脆,你不僅能選擇是否要定義一個(gè)類/結(jié)構(gòu)體/枚舉嚎杨,還能靈活的在你創(chuàng)建的類型(類/結(jié)構(gòu)體/枚舉)上定義方法。

實(shí)例方法

在 Swift 語言中发侵,實(shí)例方法是屬于某個(gè)特定類交掏、結(jié)構(gòu)體或者枚舉類型實(shí)例的方法。

實(shí)例方法提供以下方法:

可以訪問和修改實(shí)例屬性

提供與實(shí)例目的相關(guān)的功能

實(shí)例方法要寫在它所屬的類型的前后大括號({})之間刃鳄。

實(shí)例方法能夠隱式訪問它所屬類型的所有的其他實(shí)例方法和屬性盅弛。

實(shí)例方法只能被它所屬的類的某個(gè)特定實(shí)例調(diào)用。

實(shí)例方法不能脫離于現(xiàn)存的實(shí)例而被調(diào)用。

語法

func funcname(Parameters) -> returntype

{

Statement1

Statement2

……

Statement N

return parameters

}

實(shí)例

import Cocoa

class Counter {

var count = 0

func increment() {

count += 1

}

func incrementBy(amount: Int) {

count += amount

}

func reset() {

count = 0

}

}

// 初始計(jì)數(shù)值是0

let counter = Counter()

// 計(jì)數(shù)值現(xiàn)在是1

counter.increment()

// 計(jì)數(shù)值現(xiàn)在是6

counter.incrementBy(amount: 5)

print(counter.count)

// 計(jì)數(shù)值現(xiàn)在是0

counter.reset()

print(counter.count)

以上程序執(zhí)行輸出結(jié)果為:

6

0

Counter類定義了三個(gè)實(shí)例方法:

increment 讓計(jì)數(shù)器按 1 遞增挪鹏;

incrementBy(amount: Int) 讓計(jì)數(shù)器按一個(gè)指定的整數(shù)值遞增见秽;

reset 將計(jì)數(shù)器重置為0。

Counter 這個(gè)類還聲明了一個(gè)可變屬性 count讨盒,用它來保持對當(dāng)前計(jì)數(shù)器值的追蹤解取。

方法的局部參數(shù)名稱和外部參數(shù)名稱

Swift 函數(shù)參數(shù)可以同時(shí)有一個(gè)局部名稱(在函數(shù)體內(nèi)部使用)和一個(gè)外部名稱(在調(diào)用函數(shù)時(shí)使用

Swift 中的方法和 Objective-C 中的方法極其相似。像在 Objective-C 中一樣返顺,Swift 中方法的名稱通常用一個(gè)介詞指向方法的第一個(gè)參數(shù)禀苦,比如:with,for遂鹊,by等等振乏。

Swift 默認(rèn)僅給方法的第一個(gè)參數(shù)名稱一個(gè)局部參數(shù)名稱;默認(rèn)同時(shí)給第二個(gè)和后續(xù)的參數(shù)名稱為全局參數(shù)名稱。

以下實(shí)例中 'no1' 在swift中聲明為局部參數(shù)名稱秉扑。'no2' 用于全局的聲明并通過外部程序訪問慧邮。

import Cocoa

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)

以上程序執(zhí)行輸出結(jié)果為:

600

320

3666

是否提供外部名稱設(shè)置

我們強(qiáng)制在第一個(gè)參數(shù)添加外部名稱把這個(gè)局部名稱當(dāng)作外部名稱使用(Swift 2.0前是使用 # 號)。

相反舟陆,我們呢也可以使用下劃線(_)設(shè)置第二個(gè)及后續(xù)的參數(shù)不提供一個(gè)外部名稱误澳。

import Cocoa

class multiplication {

var count: Int = 0

func incrementBy(first no1: Int, no2: Int) {

count = no1 * no2

print(count)

}

}

let counter = multiplication()

counter.incrementBy(first: 800, no2: 3)

counter.incrementBy(first: 100, no2: 5)

counter.incrementBy(first: 15000, no2: 3)

以上程序執(zhí)行輸出結(jié)果為:

2400

500

45000

self 屬性

類型的每一個(gè)實(shí)例都有一個(gè)隱含屬性叫做self,self 完全等同于該實(shí)例本身秦躯。

你可以在一個(gè)實(shí)例的實(shí)例方法中使用這個(gè)隱含的self屬性來引用當(dāng)前實(shí)例脓匿。

import Cocoa

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("Self 內(nèi): \(res)")

}

func tot(c: Int) -> Int {

return res - c

}

func result() {

print("結(jié)果為: \(tot(c: 20))")

print("結(jié)果為: \(tot(c: 50))")

}

}

let pri = calculations(a: 600, b: 300)

let sum = calculations(a: 1200, b: 300)

pri.result()

sum.result()

以上程序執(zhí)行輸出結(jié)果為:

Self 內(nèi): 900

Self 內(nèi): 1500

結(jié)果為: 880

結(jié)果為: 850

結(jié)果為: 1480

結(jié)果為: 1450

在實(shí)例方法中修改值類型

Swift 語言中結(jié)構(gòu)體和枚舉是值類型。一般情況下宦赠,值類型的屬性不能在它的實(shí)例方法中被修改。

但是米母,如果你確實(shí)需要在某個(gè)具體的方法中修改結(jié)構(gòu)體或者枚舉的屬性勾扭,你可以選擇變異(mutating)這個(gè)方法,然后方法就可以從方法內(nèi)部改變它的屬性铁瞒;并且它做的任何改變在方法結(jié)束時(shí)還會保留在原始結(jié)構(gòu)中妙色。

方法還可以給它隱含的self屬性賦值一個(gè)全新的實(shí)例,這個(gè)新實(shí)例在方法結(jié)束后將替換原來的實(shí)例慧耍。

import Cocoa

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)

以上程序執(zhí)行輸出結(jié)果為:

9

15

270

450

81000

135000

在可變方法中給 self 賦值

可變方法能夠賦給隱含屬性 self 一個(gè)全新的實(shí)例身辨。

import Cocoa

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)

以上程序執(zhí)行輸出結(jié)果為:

39

65

類型方法

實(shí)例方法是被類型的某個(gè)實(shí)例調(diào)用的方法,你也可以定義類型本身調(diào)用的方法芍碧,這種方法就叫做類型方法煌珊。

聲明結(jié)構(gòu)體和枚舉的類型方法,在方法的func關(guān)鍵字之前加上關(guān)鍵字static泌豆。類可能會用關(guān)鍵字class來允許子類重寫父類的實(shí)現(xiàn)方法定庵。

類型方法和實(shí)例方法一樣用點(diǎn)號(.)語法調(diào)用。

import Cocoa

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)

以上程序執(zhí)行輸出結(jié)果為:

35

5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蔬浙,隨后出現(xiàn)的幾起案子猪落,更是在濱河造成了極大的恐慌,老刑警劉巖畴博,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笨忌,死亡現(xiàn)場離奇詭異,居然都是意外死亡俱病,警方通過查閱死者的電腦和手機(jī)官疲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庶艾,“玉大人袁余,你說我怎么就攤上這事≡圩幔” “怎么了颖榜?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長煤裙。 經(jīng)常有香客問我掩完,道長,這世上最難降的妖魔是什么硼砰? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任且蓬,我火速辦了婚禮,結(jié)果婚禮上题翰,老公的妹妹穿的比我還像新娘恶阴。我一直安慰自己,他們只是感情好豹障,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布冯事。 她就那樣靜靜地躺著,像睡著了一般血公。 火紅的嫁衣襯著肌膚如雪昵仅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天累魔,我揣著相機(jī)與錄音摔笤,去河邊找鬼。 笑死垦写,一個(gè)胖子當(dāng)著我的面吹牛吕世,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梯投,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼寞冯,長吁一口氣:“原來是場噩夢啊……” “哼渴析!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吮龄,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤俭茧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后漓帚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體母债,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年尝抖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了毡们。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昧辽,死狀恐怖衙熔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搅荞,我是刑警寧澤红氯,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站咕痛,受9級特大地震影響痢甘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茉贡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一塞栅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腔丧,春花似錦放椰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至科汗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绷雏,已是汗流浹背头滔。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涎显,地道東北人坤检。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像期吓,于是被迫代替她去往敵國和親早歇。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,783評論 1 10
  • # Swift方法 在 Swift 中特定類型的相關(guān)聯(lián)功能被稱為方法。在 Objective C 中類是用來定義方...
    刺骨寒閱讀 1,702評論 0 1
  • 方法是與某些特定類型相關(guān)聯(lián)的函數(shù)箭跳。類晨另、結(jié)構(gòu)體、枚舉都可以定義實(shí)例方法谱姓;實(shí)例方法為特定類型的實(shí)例封裝具體的任務(wù)與功能...
    EndEvent閱讀 611評論 3 5
  • 在Swift中借尿,類,結(jié)構(gòu)體屉来,枚舉路翻,都能定義實(shí)例方法。 結(jié)構(gòu)和枚舉可以在Swift中定義方法的事實(shí)是與C和Objec...
    Joker_King閱讀 484評論 0 0
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,829評論 0 6