添加[无主的自我]将关闭的说法斯威夫特

问题描述 投票:2回答:2

我有一个完成处理程序函数,返回一个参数或多个。

在客户端,执行完成处理的时候,我想有一个unowned参考self,以及具有访问传递的参数。

这是说明这个问题,我试图达到的目标游乐场例子。

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
      //...
    }
  }
}
swift closures automatic-ref-counting unowned-references
2个回答
4
投票

正如我在我的评论说:

Struct().function { [unowned self] (string) in 
    //your code here 
}

捕获列表和封闭的参数应该是在从封闭Apple Documentation更多信息的顺序

定义捕获列表

在捕获列表中的每个项目是弱或无主关键字与一个类实例的引用(如个体经营)配对或与某个值初始化的变量(如委托= self.delegate!)。这些配对的是一对方括号,以逗号分隔的内写入。

将捕获列表中的封闭的参数列表前,如果提供他们返回类型:

lazy var someClosure: (Int, String) -> String = {
    [unowned self, weak delegate = self.delegate!] (index: Int, stringToProcess: String) -> String in
    // closure body goes here 
}

如果关闭不指定参数列表或返回类型,因为他们可以从上下文推断,发生在封闭的一开始捕获列表中,随后在关键字:

lazy var someClosure: () -> String = {
     [unowned self, weak delegate = self.delegate!] in
     // closure body goes here
 }

1
投票

难道仅仅是为包括您需要关闭参数列表[无主的自我]语法?

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

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

Class().execute()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.