让我说我有这样的事情:
func myFunc() -> (Any, Any)? {...}
func anotherFunc() {
if var (a, b) = myFunc() {
// a is mutated and accessed; b is accessed, but not mutated
a = b
}
}
由于var
发生变异,我需要a
元组,但Xcode抱怨“b
从未发生变异,请考虑使用let
” - 这有点合理参数,但我无法将元组定义为(var, let)
。
我想我可以使用索引来访问这两个元素而不是声明它们,从而避免了这个问题。但有更好的方法吗?
答案 0 :(得分:10)
如果你使用模式匹配(即if case
),那么你可以使用tuple binding pattern,它允许你分别注释绑定的可变性:
if case (var a, let b)? = myFunc() {
a = b
}
这也使用optional pattern x?
来解开myFunc()
的结果,因为我们现在使用模式匹配而不是可选绑定。