Swift 结构的值绑定模式

Value-binding pattern with Swift structs

作为编程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
//                ^

无法在 Swift 中解构结构。

您的元组 point = (3, 2) 属于 (Int, Int) 类型,这是您能够解构它的部分原因。

您的结构类型 S 只是 S。它的变量 ab 并不像元组那样包含在其类型中。结构只是一种完全不同的对象,它不存在这种行为。

这在语言中不存在。

一个选项是计算的助手 属性:

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 可以提供帮助。