Mutating self (struct/enum) inside escaping closure in Swift 3.0

后端 未结 3 812
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-01-04 08:07

In swift 2.2, We could mutate a struct or enum within a closure, when it was inside a mutating function. But in swift 3.0 its no longer possible. I get the following error

3条回答
  •  醉梦人生
    2021-01-04 08:39

    Struct is value type. So when use as Model or ModelView, you can make up a closure with new Value to VC.

    struct Point {
        var x = 0.0, y = 0.0
    
        mutating func moveBy(x deltaX: Double, y deltaY: Double) {
            x += deltaX
            y += deltaY
    
            test { [x, y](a) -> Point in
                // Get the Error in the below line.
                return Point(x: Double(a), y: y)
            }
    
        }
    
        mutating func test(myClosure: @escaping (_ a: Double) -> Point) {
            self = myClosure(3)
        }
    }
    

提交回复
热议问题