在 Swift 中使用元组和泛型,并想了解我正在测试的一些实验是否可以实现。
我创建了:
struct TupleAssertion<T> {
let value: T
func assertValue<each Value: Equatable>(
_ expectedValue: (repeat each Value)
) where (repeat each Value) == T {
if value == expectedValue {
print("Equal")
} else {
print("Not equaL")
}
}
}
let tupleAssertion = TupleAssertion(value: (1, 2))
tupleAssertion.assertValue((1, 2))
但不幸的是我收到错误:
binary operator '==' cannot be applied to two '(repeat each Value)' operands
但是这种方法有效:
func createTuple<each Value: Equatable>(val: repeat each Value) -> (repeat each Value) {
return (repeat each val)
}
createTuple(val: 1, 2) == (1, 2)
createTuple(val: 1, 3) == (1, 2)
需要进行哪些更改才能使我的第一种方法发挥作用?
看起来您添加了括号来“解决”尚不支持相同元素要求 (
== T
) 的事实。添加括号不会使不支持的内容得到支持。如果你这样写,你会得到正确的诊断:
) where repeat each Value == T { // Same-element requirements are not yet supported
您编写的方式试图使类型
repeat each Value
本身等于 T
,这不是您的意思。