代表们的Swift闭包

Eha*_*fan 1 delegates closures swift

所以当我从委托方法收到一些东西时,我正在尝试创建一个闭包:

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"])
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做..我感谢任何帮助.

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

谢谢

Sam*_*mah 5

从类型中删除可选项.编译器不了解如何调用,completion因为它具有双重可选类型.

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

self.completion?(info)

  • 您的typealias是可选的,并且您还将`var completion`声明为可选.编译器不了解如何使用double可选项调用函数.在大多数情况下,您只需要在实际变量声明上使用`?`而不是它们的typealiases. (3认同)
  • 基于代码片段,我没有看到`typealias`包含可选的原因.它只是通过强制你总是有一个可选项来限制类型.双重打开也是邪恶的.:) (3认同)
  • 你有一个嵌套的可选项.`typealias`已经是一个可选类型.接下来,您的`completion`属性被声明为可选.所以你有两个级别的可选项来完成. (2认同)