美文网首页
swift中在闭包内修改结构体的内容

swift中在闭包内修改结构体的内容

作者: 梁森的简书 | 来源:发表于2021-01-13 17:49 被阅读0次

逃逸闭包不可

    mutating func doSome() {
        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            self.name = "结构体改变成员变量"
        }
    }
0.逃逸闭包.jpg

上面代码会报错:“Escaping closure captures mutating 'self' parameter”
逃逸闭包不可修改 的self这个参数。
当self是结构体或枚举实例时,逃逸闭包不能捕获此self。
如果self是一个类的实例,则逃逸闭包能捕获self。
如果只是普通闭包则能捕获所有类型的self。

项目中使用场景

使用某个类(struct或者class)进行网络请求,并将请求结果赋值给该类的一个属性。
1.使用struct

struct AYWorkHomeViewModel: LSConvertable {
    var page: Int = 1
    var pageSize: Int = 10
    var result: LSModel?
 
   func getWorkHomeOrders(finishCallBack: @escaping NetCompleteCallBack) {
        let dict = self.convertToDict()
        LSNetManager.GET(path: "auntNeedList", parameters: dict, serverType: .apis) { (netResModel, netError) in
           self.result = netResModel
        }
    }
    

上面的代码中self.result = netResModel是会报错的。

2.使用class

class AYWorkHomeViewModel: LSConvertable {
    var page: Int = 1
    var pageSize: Int = 10
    var result: LSModel?
 
   func getWorkHomeOrders(finishCallBack: @escaping NetCompleteCallBack) {
        let dict = self.convertToDict()
        LSNetManager.GET(path: "auntNeedList", parameters: dict, serverType: .apis) { (netResModel, netError) in
           self.result = netResModel
        }
    }
    

上面的代码中self.result = netResModel是不会报错的。

相关文章

  • swift中在闭包内修改结构体的内容

    逃逸闭包不可 上面代码会报错:“Escaping closure captures mutating 'self'...

  • Swift4中 结构体中使用闭包再做自我引用时的问题

    在swift4中使用结构体时, 在一个闭包中使用Self内的方法或属性时,会报这样错误 #### “Closure...

  • Swift初探(二)

    继Swift初探之后,我们来继续学习下Swift里的结构体,类,协议,闭包 结构体 两种调用结构体的方法1.调用结...

  • Swift基础2

    本文接着上一篇,对Swift的结构体、类、协议、扩展、枚举以及闭包做一个简单的介绍。 七、结构体 Swift的结构...

  • Swift六&七 一: 函数定义在结构体, 类, 枚举中 二:

    一: 函数定义在结构体, 类, 枚举中二: 闭包表达式三: 闭包 一: 函数定义在结构体, 类, 枚举中 枚...

  • Swift进阶五:结构体

    在swift中,类,结构体,枚举以及闭包捕获变量都可以作为存储结构化数据的方法.但在标准库中,绝大多数类型都是结构...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • swift-类和结构体

    结构体和类 swift 中储存结构化的数据 可以用 结构体,枚举,类及使用闭包捕获变量。 类和结构体不同点: 1....

  • 闭包

    闭包 本节内容包括: 闭包表达式 尾随闭包 值捕获 闭包是引用类型 Swift 中的闭包与 C 和 Objecti...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

网友评论

      本文标题:swift中在闭包内修改结构体的内容

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