swift - 如何使用函数作为值声明字典并以整数为键?

原文 标签 swift function dictionary swift2

struct Test {
    func isOk () -> Bool{
        return true
    }

    var mapping: [Int: () -> Bool] = [
        1: isOk
    ]

    func test() -> Bool {
        return mapping[1]()
    }
}

我收到此错误:
Cannot convert value of type '(Test) -> () -> Bool' to expected dictionary value type '() -> Bool'

任何的想法?谢谢!

最佳答案

你看到这个奇怪的类型 ( (Test) -> () -> Bool ) 因为 Swift instance methods are curried functions .

如果制作 isOk进入静态方法是可以接受的,你可以这样做:

struct Test {
    static func isOk() -> Bool { //Make it static
        return true
    }

    var mapping: [Int : () -> Bool] = [
        1 : Test.isOk // Static method must be qualified by its parent type
    ]

    func test() -> Bool { //Bool return value necessary
        //TODO: remove force unwrapping.
        return mapping[1]!() //subscripting a Dict might return nil
    }
}

isOk必须保留为实例方法,您可以这样做:
struct Test {
    func isOk() -> Bool {
        return true
    }

    var mapping: [Int : (Test) -> () -> Bool] = [ //change type
        1 : isOk
    ]

    //the instance method received from the dict needs an instance to act on
    func test(instance: Test) -> Bool { //Bool return value necessary
        //TODO: remove force unwrapping.
        return mapping[1]!(instance)() //curried function call
    }
}

关于swift - 如何使用函数作为值声明字典并以整数为键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38130377/

相关文章:

python - 如何创建两个列表的字典,以最少的查询次数保留第一个列表的顺序?

swift - 获取当前值并开始观察MutableProperty

swift - Swift:如何为每个特定的标记设置功能?

c - 将数组作为参数传递给 C 中的函数

dplyr中的R用户定义函数总结

python - 如何在python 3.4中使Maps和lambda与矩阵配合使用?

python - 将字符串行转换为字典

ios - 在Swift 4.2中每秒钟倒数计时器时更新UILabel

swift - 在启用滚动的堆栈 View 内扩展UITextView

json - Swift-保存异步数据