比较 Swift 中的通用元组

问题描述 投票:0回答:1

在 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)

需要进行哪些更改才能使我的第一种方法发挥作用?

swift generics tuples
1个回答
0
投票

看起来您添加了括号来“解决”尚不支持相同元素要求 (

== T
) 的事实。添加括号不会使不支持的内容得到支持。如果你这样写,你会得到正确的诊断:

) where repeat each Value == T {  // Same-element requirements are not yet supported

您编写的方式试图使类型

repeat each Value
本身等于
T
,这不是您的意思。

© www.soinside.com 2019 - 2024. All rights reserved.