[英]Add [unowned self] to the closure argument Swift
我有一個帶有完成處理程序的函數,返回一個或多個參數。
在客戶端中,當執行完成處理程序時,我想unowned
對self
未unowned
引用,以及對傳遞的參數的訪問權。
這是一個Playground示例,說明了我要解決的問題和目標。
import UIKit
struct Struct {
func function(completion: (String) -> ()) {
completion("Boom!")
}
func noArgumentsFunction(completion: () -> Void) {
completion()
}
}
class Class2 {
func execute() {
Struct().noArgumentsFunction { [unowned self] in
//...
}
Struct().function { (string) in // Need [unowned self] here
//...
}
}
}
正如我在評論中所說
Struct().function { [unowned self] (string) in
//your code here
}
捕獲應該是關閉順序的列表和關閉參數 ,詳情請參閱Apple文檔
定義捕獲列表
捕獲列表中的每個項目都是對weak或unown關鍵字的配對,這些關鍵字與對類實例的引用(例如self)或用某個值初始化的變量(例如委托= self.delegate!)配對。 這些配對寫在一對方括號內,並用逗號分隔。
將捕獲列表放置在閉包的參數列表之前,如果提供,則返回類型:
lazy var someClosure: (Int, String) -> String = {
[unowned self, weak delegate = self.delegate!] (index: Int, stringToProcess: String) -> String in
// closure body goes here
}
如果閉包沒有指定參數列表或返回類型,因為可以從上下文中推斷出它們,則將捕獲列表放在閉包的最開始,然后是in關鍵字:
lazy var someClosure: () -> String = {
[unowned self, weak delegate = self.delegate!] in
// closure body goes here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.