国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 利辛县| 象州县| 凤阳县| 巴彦淖尔市| 临沭县| 吴川市| 台山市| 延吉市| 都安| 邹平县| 荥经县| 原平市| 于都县| 凉城县| 沂南县| 固安县| 岳普湖县| 汾阳市| 苏州市| 彭阳县| 监利县| 奈曼旗| 郧西县| 永顺县| 清水县| 荥阳市| 北流市| 满城县| 淄博市| 汝城县| 荣昌县| 大埔县| 自贡市| 田阳县| 宁安市| 武胜县| 勃利县| 阿拉善右旗| 德州市| 勃利县| 丰宁|