swift闭包怎么改变外部变量的值

我想请分析下,swift闭包怎么改变外部变量的值
最新回答
Cunese-红玫瑰*

2024-10-13 19:53:52

有好几种情况

第一个是在

定义域
范围内直接修改:

func function(completion: @escaping (Int) -> String) {
...
}

var b = 1 
function { _ in 
   // 修改变量
   b = 100
   return ""
}

第二种是使用

返回值
,类似于reactive:

func function( completion: @escaping (Int) -> Int ) -> Int {
 ...
}

let x = function { a -> Int in
   return a * 2
}

第三种是指针传递,我估计你可能希望要这个东西:

// 假设当前类的引用为self,其类型为SomeClass
let this = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())
// 另外假定someFunctionType是某种C语言的传统函数,需要传递指针变量p用于修改目标对象类
let someFunction: someFunctionType = { p  in    
     let q = Unmanaged<SomeClass>.fromOpaque(p!)    
     let me = q.takeUnretainedValue()    
     // 此时me 已经相当于是self对象了,可以直接使用并修改其内容
}