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

首頁 > 系統(tǒng) > iOS > 正文

iOS開發(fā)中Swift逃逸閉包知識

2020-07-26 02:30:00
字體:
來源:轉載
供稿:網(wǎng)友

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

1、閉包作為一個參數(shù)傳到函數(shù)中

2、閉包在函數(shù)返回之后才執(zhí)行

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

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

import UIKit/** 逃逸閉包滿足下面2個條件: * 1、handle閉包作為一個參數(shù)傳到函數(shù)payRequest中 * 2、并且handle閉包在函數(shù)返回之后才執(zhí)行 * 需要在參數(shù)前面加入標注: @escaping,用來指明這個閉包是允許“逃逸”出這個函數(shù)的 * 注意:將一個閉包標記為 @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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌宁县| 唐河县| 喀什市| 旅游| 寿宁县| 交口县| 黎城县| 盐津县| 上犹县| 沙田区| 荃湾区| 夏河县| 金平| 全南县| 大悟县| 阆中市| 巩留县| 琼结县| 库尔勒市| 庆阳市| 江陵县| 湟中县| 启东市| 舟山市| 阳高县| 阳山县| 庄河市| 资溪县| 龙里县| 溆浦县| 花莲市| 广平县| 丹阳市| 锡林浩特市| 寻乌县| 阳东县| 加查县| 宣汉县| 宁海县| 阿荣旗| 天镇县|