从数组中删除闭包

时间:2015-06-03 16:21:28

标签: swift

从数组中删除闭包但未使用它会导致编译器错误“表达式解析为未使用的函数”。有没有一种避免这种情况的好方法,除了将函数分配给一次性变量?

typealias StringFunction = () -> String  
var list = [StringFunction]()            
list.append({ "Hello World!" })          
let hi = list[0]()                       // "Hello World!"
list.removeAtIndex(0)                    // Expression resolves to an unused function
let _ = list.removeAtIndex(0)            // Works

2 个答案:

答案 0 :(得分:0)

这为我编译:

typealias StringFunction = () -> String
var list = [StringFunction]()
list.append({ "Hello World!" })
let hi = list[0]()                       // "Hello World!"
list.removeAtIndex(0)()

虽然这确实调用了该功能。 (感谢Martin R)

答案 1 :(得分:0)

将表达式的结果分配给一次性变量 是正确的方法。实际上,这是在Swift中处理未使用结果的惯用方式。

因此(如另一个答案的注释中所述),正确的解决方案是:

typealias StringFunction = () -> String
var list = [StringFunction]()
list.append({ "Hello World!" })
let hi = list[0]()
_ = list.remove(at: 0) // Note there's no need for `let`

这样做不仅可以使您的代码更清晰地表达您的意图(即表明您绝对不需要该方法的结果),而且还可以帮助编译器执行各种有用的优化。