如何在Swift中声明一个键入的字典词典?

时间:2016-02-11 14:44:45

标签: swift dictionary

我有Swift.Dictionary结构,如

let tests:[ [String:Any] ] = [
            [ "f" : test1, "on" : true ],
            [ "f" : test2, "on" : false ],
            [ "f" : test3, "on" : false ],
            [ "f" : test4, "on" : false ],
            [ "f" : test5, "on" : false ]
        ]

其中fclosure()->()onBool。我使用它根据eval值枚举和on闭包:

for (_, test) in tests.enumerate() {
        if test["on"] as! Bool {
            let f:()->()=test["f"] as! ()->();
            f();
        }
    }

如何明确声明此Swift.Dictionary结构,以避免展开并强制转换为as!

let f:()->()=test["f"] as! ()->();

2 个答案:

答案 0 :(得分:3)

这是对词典的非常不恰当的使用。创建一个元组数组,甚至是为此目的设计的轻量级结构数组,即带有一个闭包-Bool对。

答案 1 :(得分:3)

这有用吗?它看起来也更清洁了。

typealias MyClosure = (() -> ())
typealias MyTuple = (f: MyClosure, on: Bool)

let tests: [MyTuple] = [ etc...

for item in tests {
    if item.on {
        let f = item.f
        f()
    }
}