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)
这在语言中并不存在。
一种选择是辅助计算属性:
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 或许可以提供帮助。