从数组中删除闭包但未使用它会导致编译器错误“表达式解析为未使用的函数”。有没有一种避免这种情况的好方法,除了将函数分配给一次性变量?
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
答案 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`
这样做不仅可以使您的代码更清晰地表达您的意图(即表明您绝对不需要该方法的结果),而且还可以帮助编译器执行各种有用的优化。