我有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 ]
]
其中f
是closure
类()->()
而on
是Bool
。我使用它根据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! ()->();
答案 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()
}
}