簡體   English   中英

在閉包參數Swift中添加[unown self]

[英]Add [unowned self] to the closure argument Swift

我有一個帶有完成處理程序的函數,返回一個或多個參數。

在客戶端中,當執行完成處理程序時,我想unownedselfunowned引用,以及對傳遞的參數的訪問權。

這是一個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
 }

僅僅是將[unown self]包含在所需的閉包參數列表中的語法嗎?

struct Struct {
    func function(completion:(String)->()) {
        completion("Boom!")
    }
}

class Class {
    func execute() {
        Struct().function { [unowned self] string in
            print(string)
            print(self)
        }
    }
}

Class().execute()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM