美文网首页
Swift随笔 as? 逃逸闭包

Swift随笔 as? 逃逸闭包

作者: 看谷秀 | 来源:发表于2022-04-20 13:03 被阅读0次

as 类型转换 向上转换

// NSIndexPath 转 IndexPath
NSIndexPath(row: 0, section: 0) as IndexPath
// String 转 NString
 let str: String = "abc"
 let str1 = (str as NSString).substring(to: 2) 
 print(type(of: str) ,str1, str.count) // String ab 3

使用as? 进行向下转型操作;转换成功为可选类型, 转换失败nil

let dict: [String: Any] = ["age":10,"a":2]
let age = dict["age"] as? Int
// age = (Int?)10 可选类型
let age1 = dict["age"] as? String
// age = (String)nil 可选类型

// 实例1
if let resultArray = response.resBody as? [[String: Any]], !resultArray.isEmpty, let reaultDictionary = resultArray.first,  let itemDictionary = reaultDictionary["sematterList"] {
           let modelArray = Mapper<XXAgedAreaModel>().mapArray(JSONObject: itemDictionary) ?? []
           let sectionModel = weakSelf.dataSource.first
           sectionModel?.models = modelArray
           }
       }
// 实例2
applist 定义为MBApplySubModel 类型
  if let list = dataSource?[indexPath.row].applist as? [MBApplySubModel] {
           vc.dataSource = list
       }

as! 功能同as? 转换失败crash

// 定义的就是XXCreoleHealthCell
let homeCell = collectionView.dequeueReusableCell(withReuseIdentifier: XXCreoleHealthCell.identifier, for: indexPath) as! XXCreoleHealthCell

let model = ApplyModel.applist[indexPath.row]
self.ApplyTableViewCell(model: model as! MBApplySubModel)

if let model = ApplyModel.applist[indexPath.row] as? MBApplySubModel {
            self.ApplyTableViewCell(model: model)
}

闭包 @escaping逃逸闭包 非逃逸闭包
// 非逃逸闭包、逃逸闭包,一般都是当做参数传递给函数
// 非逃逸闭包:闭包调用发生在函数结束前,闭包调用在函数作用域内
// 逃逸闭包: 闭包有可能在函数结束后调用,闭包调用逃离了函数作用域,需要通过@escaping声明

// 声明闭包参数字典,没有返回值
typealias XXGovpayCompletion = ([String: Any]) -> Void
// 封装网络请求
 private static func requestAndOpenGovpay(classCode: String, method: String, fromViewController: UIViewController, completion:  @escaping XXGovpayCompletion) {
        let parameters = ["Email" : "xiaoming@126.com", "Vno" : "2" ] 
        let requestModel: HttpRequestModel = HttpRequestModel()
        requestModel.parames = parameters
        completion([:])  
        // 非逃逸闭包: 闭包回调写在这, 函数体没有执行完毕, 参数completion:  XXGovpayCompletion 前面不需要添加 @escaping 
        fromViewController.showHUD()
        HttpService.request(requestModel) { [weak fromViewController] (response, error) in
            fromViewController?.hideHUD()
            if response.isSuccess(), let resultBody = response.resBody as? [String : Any], let url = resultBody["url"] as? String, let sourceViewController = fromViewController?.navigationController{
                let userInfo: [String : Any] = ["url" : url,
                                                                   "loadType" : "2",
                                                                   "parameters" : resultBody,
                                                                   "navigationVC" : sourceViewController,
                                                                   "closeImageName" : "closeWeb"]
                URLRouter.openURL(ModulePayURL, withUserInfo: userInfo)
//                completion([:])
        // 逃逸闭包: 闭包回调写在这, 函数体已经全部执行完毕, 参数completion:  XXGovpayCompletion 千面需要添加 @escaping 
            } else {
                fromViewController?.showToast(withText: response.errormsg)
            }
        }
    }

相关文章

  • iOS swift 逃逸闭包(@escaping)和非逃逸闭

    iOS swift 逃逸闭包(@escaping)和非逃逸闭包 (@noescaping) 逃逸闭包: 逃逸闭包...

  • Swift中的闭包

    在Swift中有两种闭包,逃逸闭包(@escaping)和非逃逸闭包(@nonescaping)。从Swift 3...

  • Swift: @escaping 和 @noescaping 是

    @noescaping: 非逃逸闭包类型@escaping: 逃逸闭包类型 Swift 3.0 之后,传递闭包...

  • 逃逸闭包&非逃逸闭包

    逃逸闭包&非逃逸闭包 Swift中的闭包有两种:逃逸闭包和非逃逸闭包,前者表示闭包将在函数返回之后执行;而后者则表...

  • swift 逃逸闭包和非逃逸闭包的区别

    swift 逃逸闭包和非逃逸闭包的区别 逃逸闭包:闭包做为函数的参数传递时,在函数体结束后被调用,我们就说这个闭包...

  • iOS开发随笔

    1.swift3.0后的闭包默认是非逃逸闭包, 所以在逃逸闭包前需要添加@escaping2.instrument...

  • Swift 5.1 (7) - 闭包

    级别: ★☆☆☆☆标签:「iOS」「Swift 5.1」「闭包」「逃逸闭包」「尾随闭包」作者: 沐灵洛审校: Qi...

  • Swift3:@escaping

    @escaping 在Swift3中,闭包默认是非逃逸的。在Swift3之前,事情是完全相反的:那时候逃逸闭包是默...

  • Swift3:@escaping

    @escaping 在Swift3中,闭包默认是非逃逸的。在Swift3之前,事情是完全相反的:那时候逃逸闭包是默...

  • swift 非逃逸闭包、逃逸闭包的使用场景

    闭包只有在函数中做参数时才会区分逃逸闭包和非逃逸闭包。Swift 3.0之后,传递闭包到函数中的时候,系统会默认为...

网友评论

      本文标题:Swift随笔 as? 逃逸闭包

      本文链接:https://www.haomeiwen.com/subject/fqcvertx.html