我有2个不同的元组类型(Double,Double):
let tuple1: (Double, Double) = (1, 2) let tuple2: (Double, Double) = (3, 4)
我想使用一个简单的if语句比较它们的值。就像是:
if (tuple1 == tuple2) { // Do stuff }
这将引发以下错误:
找不到’==’的重载,该重载接受提供的参数
我当前的解决方案是这样的功能:
func compareTuples <T: Equatable> (tuple1: (T, T), tuple2: (T, T)) -> Bool { return (tuple1.0 == tuple2.0) && (tuple1.1 == tuple2.1) }
我已经尝试编写扩展,但是不能使其用于元组。您对此问题是否有更优雅的解决方案?
更新资料
正如Martin R在评论中指出的那样,最多可以将具有六个组成部分的元组与进行比较==。具有不同组件数或不同组件类型的元组被视为不同类型,因此无法进行比较,但是下面描述的简单情况的代码现在已过时。
==
试试这个:
func == <T:Equatable> (tuple1:(T,T),tuple2:(T,T)) -> Bool { return (tuple1.0 == tuple2.0) && (tuple1.1 == tuple2.1) }
与您的完全一样,但是我叫它==。然后像:
(1, 1) == (1, 1)
是真实的
(1, 1) == (1, 2)
是假的