Swift 结构的值绑定模式

Dav*_*nic 5 struct destructuring swift

正如《Swift 编程》一书中所描述的,元组可以在赋值中或通过值绑定来解构。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)).")
Run Code Online (Sandbox Code Playgroud)

我找不到任何关于如何对结构进行等效操作的提及。例如:

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
//                ^
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 4

这在语言中并不存在。

一种选择是辅助计算属性:

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
Run Code Online (Sandbox Code Playgroud)

当然,您必须手动保持同步。Sourcery 或许可以提供帮助。