词典中的闭包

use*_*195 3 closures dictionary swift

有一个问题已经公布了一个已接受的答案但截至今天它没有用.它在Playground中引发了一个错误Expected',' separator

错误

将Swift Closures作为值添加到Swift字典中

class CommandResolver {
    private var commandDict: [String: () -> Void]

    init() {
        commandDict = [String: () -> Void]()
        setUpCommandDict()
    }

    func setUpCommandDict() {
        commandDict["OpenAssessment_1"] = {
            println("I am inside closure")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

dre*_*wag 5

这很可能是编译器中的一个错误.但是,创建空字典时无需重新指定类型.相反,您可以使用空字典文字:

init() {
    self.commandDict = [:]
    self.setUpCommandDict()
}
Run Code Online (Sandbox Code Playgroud)

字典的类型是从commandDict声明中推断出来的.

我过去使用的另一个解决方案是使用typealias:

class CommandResolver {
    typealias CallbackType = () -> Void
    private var commandDict: [String: CallbackType]

    init() {
        self.commandDict = [String: CallbackType]()
        self.setUpCommandDict()
    }

    func setUpCommandDict() {
        self.commandDict["OpenAssessment_1"] = {
            println("I am inside closure")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)