Swift 方法

1酱讶、不帶返回值的方法

func methodWithoutReturnValue(a : Int) {
    print(a)
}

2彼乌、帶返回值的方法

func methodWithReturnValue(a : Int) -> Int {
    return a + 10
}

3、帶參數標簽的方法灶挟,只顯示參數標簽焚挠,不顯示參數名

    func writeLetterTo(to aName : String, and bName : String) {
        
        //code
    }

//調用
    self.writeLetterTo(to: "Jack", and: "Peyton")

4漓骚、帶有默認參數值的方法

    func printTwoValue(a : Int, b : Int = 10)  {
        //code
    }

    //有2種調用方法
    //1. 只給a賦值,b使用默認的10
    printTwoValue(a: 2)
    //2. 給a蝌蹂,b都賦值,不使用b的默認值
    printTwoValue(a: 2, b: 3)

5剃允、帶有可變參數的方法

    func printNames(_ names : String...)  {
        for index in names {
            print(index)
        }
    }

    //調用
    self.printNames("Jack", "Lucy", "Michael")

6齐鲤、通過inout關鍵字在方法內部修改外面變量(不是對象)的值
我們知道外部的變量,在作為參數時给郊,是拷貝一份全新的值,賦給方法的參數统锤,所以,我們在方法中對參數進行操作的時候饲窿,是不會改變外部變量的值的;Swift提供了inout關鍵字阀溶,允許我們在方法內部修改外部變量的值鸦泳,例子:

var a = 10
var b = 20
func exchangeOutValues(a : inout Int, b : inout Int) {
    //交換啊a,b的值
    let c = a
    a = b
    b = c
}

//調用
exchangeOutValues(a: &a, b: &b)

a 和 b 的值會互換

7徒仓、方法也是對象,它的類型由參數和返回值決定

    //定義一個method
    var method : (Int, Int) -> Int

    //一個方法的實現
    func addTwoIntsValue(a : Int, b : Int) -> Int {
        return a + b    
    }
    //給method賦值
    method = addTwoIntsValue(a:b:)
    //調用
    print(method(10, 20))

8掉弛、方法作為方法的參數

    //聲明一個方法doSomething喂走,其參數為:類型為(Int) -> Int的方法
    func doSomething(method : (Int) -> Int) {
        print(method(10))
    }
    //調用doSomething方法
    self.doSomething { (a : Int) -> Int in
        return a + 1
    }

結果為 11
上面調用doSomething的時候瘫里,方法作為參數的形式很像是閉包

9裤翩、方法作為方法的返回值

    //doSomething方法返回一個類型為 (Int)->Int 的方法
    func doSomething() -> (Int) -> Int {
        return self.returnMethod(a:)
    }
    
    //這個方法將作為doSomething方法的返回值
    func returnMethod(a : Int) -> Int {
        return a + 1
    }

    //調用doSomething方法绢淀,用一個新的方法接收doSomething方法的返回值
    let method = self.doSomething()

    //調用最終的方法
    print(method(100))

結果為101

類方法和實例方法

1陌选、實例方法

1.1 實例方法的聲明

    func 方法名(參數標簽 參數名 : 參數類型) -> 返回值類型 {
        方法體
    }

上面的例子都是實例方法肴甸,不再贅述

1.2 實例方法的繼承

聲明兩個類ClassA囚巴,ClassB繼承自ClassA

class ClassA : NSObject {
    override init() {
        super.init()
    }
            
    func instanceMethod()  {
        print("instant method A")
    }
}

class ClassB : ClassA {
    override init() {
        super.init()   
    }
    //override表示重寫父類的方法
    override func instanceMethod() {
        print("instant method B")
    }
}

調用實例方法

    let a = ClassA.init()
    let b = ClassB.init()
        
    a.instanceMethod()
    b.instanceMethod()

結果顯而易見
instant method A
instant method B

2、類方法

2.1彤叉、如何聲明類方法

一般情況下,我們是通過static關鍵字來聲明類方法浮庐,但是如果一個類方法需要在子類中重寫兼呵,那就必須使用class關鍵字

//不可被子類重寫
static func classMethod1() {
    print("1")
}
//可被子類重寫
class func classMethod2() {
    print("2")
}

2.2腊敲、類方法如何繼承

class ClassA : NSObject {
    static func classMethod1() {
        print("1")
    }
    class func classMethod2() {
         print("2")
    }
}

class ClassB : ClassA {
    override class func classMethod2() {
        print("4")
    }
}

classMethod2是通過class關鍵字聲明的维苔,所以可以在ClassB中進行重寫;如果你要對classMethod1進行重寫没宾,會報錯
調用

ClassA.classMethod1()
ClassA.classMethod2()
ClassB.classMethod1()
ClassB.classMethod2()

結果
1
2
1
4

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末沸柔,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子会钝,更是在濱河造成了極大的恐慌工三,老刑警劉巖迁酸,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奸鬓,死亡現場離奇詭異掸读,居然都是意外死亡,警方通過查閱死者的電腦和手機儿惫,發(fā)現死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門姥闪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人筐喳,你說我怎么就攤上這事函喉。” “怎么了管呵?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵捐下,是天一觀的道長萌业。 經常有香客問我奸柬,道長,這世上最難降的妖魔是什么廓奕? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任桌粉,我火速辦了婚禮,結果婚禮上铃肯,老公的妹妹穿的比我還像新娘。我一直安慰自己押逼,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布漱抓。 她就那樣靜靜地躺著恕齐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仪或。 梳的紋絲不亂的頭發(fā)上士骤,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音拷肌,去河邊找鬼。 笑死添忘,一個胖子當著我的面吹牛若锁,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼煤率,長吁一口氣:“原來是場噩夢啊……” “哼乏冀!你這毒婦竟也來了?” 一聲冷哼從身側響起裳涛,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤众辨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鹃彻,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡团赁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年谨履,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怀挠。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡害捕,死狀恐怖,靈堂內的尸體忽然破棺而出尝盼,到底是詐尸還是另有隱情,我是刑警寧澤裁赠,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布疮跑,位于F島的核電站,受9級特大地震影響祖娘,放射性物質發(fā)生泄漏。R本人自食惡果不足惜掀潮,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一琼富、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧薯鼠,春花似錦、人聲如沸出皇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唯咬。三九已至,卻和暖如春狞贱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞎嬉。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工勉盅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挑胸。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓宰闰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親移袍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348