Swift 基本語法(函數(shù), 閉包)

前言

接上篇, 這篇聊一下 Swift中的 函數(shù), 閉包

一 函數(shù)

    // MARK: -函數(shù)定義  格式 func 函數(shù)名(形參列表) -> 返回值類型 {}
    func sum(a: Int, b: Int) -> Int {
        return a + b
    }
 // MARK: - 外部參數(shù)
    /** 
        - 外部參數(shù)就是在 形參前面加一個名字
        - 外部參數(shù)不會影響函數(shù)內(nèi)部的細(xì)節(jié)
        - 外部參數(shù)使用'_', 調(diào)用時 會忽略形參的名字
     */
    func sum1(num1 x: Int, num2 y: Int) -> Int {
        return x + y
    }
    func sum2(_ x: Int, _ y: Int) -> Int {    
        return x + y
    }

// MARK: - 默認(rèn)值
    /** 
        - 通過給參數(shù)設(shè)置默認(rèn)值, 在調(diào)用時候, 可以任意組合參數(shù), 如果不指定就使用默認(rèn)值
     */
    func sum3(x: Int = 1, y: Int = 3) -> Int {
        
        return x + y
    }

   /** 測試默認(rèn)值 調(diào)用
        print(sum3())  => 4
        print(sum3(x: 10, y: 30))  => 40
        print(sum3(x: 10))  => 13
        print(sum3(y: 30))  => 31
     */

 // MARK: - 無返回值
    /** 
        - 直接省略 () Viod 
     */
    func demo() {
        print("直接省略")
    }

二 閉包

func demo1() -> () {
        
        /** 
         *  閉包中 參數(shù), 返回值, 實現(xiàn)代碼都寫在 {} 中
         *  需要使用關(guān)鍵字 'in' 分割定義和實現(xiàn)
         *  {形參列表 -> 返回值類型 in // 實現(xiàn)代碼}
         */
        
        // 1. 最簡單閉包
        // () -> () 無參無返回值閉包, 連 'in' 也可以省略
        let b = {
        
            print("hello")
        }
        b()
        
        // 2. 有參數(shù)無返回值閉包
        // (Int, Int) -> ()
        let b1 = { (a: Int, b: Int) -> () in
        
            print(a + b)
        }
        b1(1, 99)
        
        // 3. 有參數(shù)有返回值
        // (Int, Int) -> Int
        let b2 = { (x: Int, y: Int) -> Int in
        
            return x * y
        }
        print(b2(10, 12))
        
    }
// MARK: - 閉包作為函數(shù)的參數(shù)
    // ( 閉包名:()->() ) -> ()
    // Function types cannot have argument labels
    // 函數(shù)類型不能有參數(shù)標(biāo)簽, (在Swift3中, 把閉包的參數(shù)名 取消了)
    func loadData(success : @escaping(_ : [String]) -> ()) -> () {
        
        let json = ["新聞", "圖片", "熱點(diǎn)"]
        
        success(json)
    }
    
    //@noescape : 如果這個閉包是在這個函數(shù)結(jié)束前被調(diào)用,就是非逃逸的閉包(默認(rèn))。
    //@escaping : 如果這個閉包是在函數(shù)執(zhí)行完后才被調(diào)用瑞佩,調(diào)用的地方超過了這函數(shù)的范圍姿现,所以叫逃逸閉包亏拉。
 /*調(diào)用*/
 // 尾隨閉包 : 如果函數(shù)最后一個參數(shù)是閉包, 函數(shù)參數(shù)可以提前結(jié)果, 最后一個參數(shù)直接使用 {} 包裝閉包的代碼
        // (相當(dāng)于沒有參數(shù))
        loadData { (result) in
            
            print(result)
        }
        // 按照函數(shù)本身編寫結(jié)果
        loadData(success: { (result) -> () in
        
            print(result)
        })
        
        // 閉包與block相同, 也有循環(huán)引用, 推薦用 [weak self]
        loadData { [weak self] (result) in
            
            print(self?.view as Any)
            print(result)
        }
 // MARK: - 網(wǎng)絡(luò)請求
    func handleData(urlStr: String, completion: @escaping(String) -> ()) -> () {
        
        let url0 = URL(string: urlStr)
        
        guard let url = url0 else {
            print("網(wǎng)址為空")
            return
        }
        
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            
            guard let data = data else {
                
                print("網(wǎng)絡(luò)請求失敗 \(String(describing: error))")
                return
            }
            
            let html = String(data: data, encoding: .utf8)
            completion(html!)
            
        }.resume()
        
    }
 /*調(diào)用*/
      handleData(urlStr: "https://wwww.baidu.com") { (result) in
            
           print(result)
      }

Swift 基礎(chǔ) 先介紹三篇, 以后有機(jī)會再寫.

以 上 !

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宵蛀,一起剝皮案震驚了整個濱河市组力,隨后出現(xiàn)的幾起案子柏卤,更是在濱河造成了極大的恐慌冬三,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缘缚,死亡現(xiàn)場離奇詭異勾笆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)桥滨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門窝爪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人该园,你說我怎么就攤上這事酸舍。” “怎么了里初?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵啃勉,是天一觀的道長。 經(jīng)常有香客問我双妨,道長淮阐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任刁品,我火速辦了婚禮泣特,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挑随。我一直安慰自己状您,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膏孟,像睡著了一般眯分。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柒桑,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天弊决,我揣著相機(jī)與錄音,去河邊找鬼魁淳。 笑死飘诗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的界逛。 我是一名探鬼主播昆稿,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仇奶!你這毒婦竟也來了貌嫡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤该溯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后别惦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狈茉,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年掸掸,在試婚紗的時候發(fā)現(xiàn)自己被綠了氯庆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡扰付,死狀恐怖堤撵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情羽莺,我是刑警寧澤实昨,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站盐固,受9級特大地震影響荒给,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刁卜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一志电、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛔趴,春花似錦挑辆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茉继。三九已至,卻和暖如春蚀乔,著一層夾襖步出監(jiān)牢的瞬間烁竭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工吉挣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留派撕,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓睬魂,卻偏偏與公主長得像终吼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氯哮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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