作为Swift编程书籍describes,元组可以在赋值中或在switch
中通过值绑定来解构
let point = (3, 2)
switch point {
case let (x, y):
print("The point is at (\(x), \(y)).")
}
let (a, b) = point
print("The point is at (\(a), \(b)).")
我找不到关于如何对结构进行等效操作的任何提及。例如:
struct S {
let a, b: Int
}
let s = S(a: 1, b: 2)
// This doesn't work:
// let (sa, sb): s
//
// Outputs: error: expression type 'S' is ambiguous without more context
// let (sa, sb) = s
// ^
答案 0 :(得分:2)
这在语言中并不存在。
一个选项是助手计算属性:
struct S {
let i: Int
let b: Bool
}
extension S {
var destructured: (Int, Bool) {
return (self.i, self.b)
}
}
let s = S(i: 10, b: false)
let (i, b) = s.destructured
当然,您必须手动使其保持同步。也许Sourcery可以帮助实现这一点。
答案 1 :(得分:1)
结构无法在Swift中进行分解。
您的元组point = (3, 2)
的类型为(Int, Int)
,这是您能够对其进行结构分解的部分原因。
您的结构类型S
仅S
。其变量a
和b
并未以与元组相同的文字方式包含在其类型中。结构只是一种完全不同的对象,因此不存在这种行为。