国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS開發中Swift逃逸閉包知識

2019-10-21 18:41:42
字體:
來源:轉載
供稿:網友

逃逸閉包必須滿足下面2個條件:

1、閉包作為一個參數傳到函數中

2、閉包在函數返回之后才執行

需要在參數前面加入標注: @escaping,用來指明這個閉包是允許“逃逸”出這個函數的。

注意:將一個閉包標記為 @escaping 意味著你必須在閉包中顯式地引用

import UIKit/** 逃逸閉包滿足下面2個條件: * 1、handle閉包作為一個參數傳到函數payRequest中 * 2、并且handle閉包在函數返回之后才執行 * 需要在參數前面加入標注: @escaping,用來指明這個閉包是允許“逃逸”出這個函數的 * 注意:將一個閉包標記為 @escaping 意味著你必須在閉包中顯式地引用 self */func payRequest(handle:@escaping (Data?, URLResponse? ,Error?) -> Void) {  let urlStr = URL(string: "http://www.baidu.com")  let session = URLSession(configuration: .default)  session.dataTask(with: urlStr!, completionHandler: handle)}func someFunctionWithNonescapingClosure(closure: () -> Void) {  closure()}class SomeClass {  var x = 10  func doSomething() {    payRequest { (data, resp, error) in      x = 100 // 此處編譯錯誤,必須顯式地引用 self    }    someFunctionWithNonescapingClosure { x = 200 }  }}

在Swift標準庫中,有很多這種類型的閉包,比如下面的異步請求的方法:

open func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask

open func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask

都符合文章開頭提到的逃逸閉包的形成條件。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台中县| 舞钢市| 贺兰县| 博野县| 永修县| 吉木萨尔县| 绥化市| 麟游县| 长汀县| 弥勒县| 普兰店市| 潼南县| 金川县| 右玉县| 黎川县| 微山县| 安多县| 广昌县| 缙云县| 塔河县| 万山特区| 白河县| 杭锦后旗| 平武县| 同仁县| 闵行区| 金华市| 锦屏县| 长春市| 和田市| 诏安县| 衡山县| 荔浦县| 德钦县| 康乐县| 巴中市| 钟山县| 林西县| 裕民县| 焉耆| 什邡市|