有委托(delegate)的 Swift 闭包

标签 swift delegates closures

所以当我从委托(delegate)方法接收到一些东西时,我试图创建一个闭包:

typealias CompletionResponse = ((_ response: AnyObject) -> Void)?

class SomeClass {

    static let shared = SomeClass()

    var completion: CompletionResponse?

    func getSomthing(completion: CompletionResponse) {
        self.completion = completion
    }

    func someDelegateMethode(info: [String]) {
        // Error is here
        if let completion = self.completion {
            completion(info)
        }
    }
}

 _ = SomeClass.shared

SomeClass.shared

SomeClass.shared.getSomthing { (obj) in
    print(obj as! [String])
}

SomeClass.shared.someDelegateMethod(info: ["Hello", "There"])

我不知道该怎么做.. 感谢您的帮助。

收到错误:
无法调用非函数类型“CompletionResponse”(又名“Optional<(AnyObject) -> ()>”)的值

谢谢

最佳答案

从类型别名中删除可选。编译器不理解如何调用 completion,因为它有一个 double 可选类型。

此外,您可以使用可选链接而不是 if let

self.completion?(info)

关于有委托(delegate)的 Swift 闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48330845/

相关文章:

ios - 如何创建单例并跳过sharedInstance静态属性语法部分

ios - 向左滑动时在 UITableViewCell 中自定义编辑 View 。 Objective-C 或 Swift

ios - 将 swift 1.2 代码转换为 swift 2 : Missing argument label in call

c# - 如何定义事件然后在事件发生时启动委托(delegate)

ios - 如何保存倒数计时器的进度?

javascript - 闭包是否使整个执行上下文保持事件状态?

php - 如何确定 PHP 中闭包/匿名函数的参数数量

ios - 函数参数名称的行为与文档不符

Javascript : getting function name with this. 名称

vb.net - 在 VB.NET 的新线程上引发事件