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
。它的变量 a
和 b
并不像元组那样包含在其类型中。结构只是一种完全不同的对象,它不存在这种行为。
这在语言中不存在。
一个选项是计算的助手 属性:
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 可以提供帮助。
作为编程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
。它的变量 a
和 b
并不像元组那样包含在其类型中。结构只是一种完全不同的对象,它不存在这种行为。
这在语言中不存在。
一个选项是计算的助手 属性:
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 可以提供帮助。