一尘不染

如何比较“任何”值类型

swift

我有几种要比较的“任何”值类型。

var any1: Any = 1
var any2: Any = 1

var any3: Any = "test"
var any4: Any = "test"

print(any1 == any2)
print(any2 == any3)
print(any3 == any4)

使用==运算符会显示错误:

“二进制运算符’==’不能应用于两个’Any’(aka’protocol <>’)操作数”

这样做的方式是什么?


阅读 236

收藏
2020-07-07

共1个答案

一尘不染

唯一的方法是使用带有==类型参数的函数,然后比较值是否都是该类型的值:

func isEqual<T: Equatable>(type: T.Type, a: Any, b: Any) -> Bool {
    guard let a = a as? T, let b = b as? T else { return false }

    return a == b
}

现在,使用上面的变量,您可以像这样比较它们:

var any1: Any = 1
var any2: Any = 1

var any3: Any = "test"
var any4: Any = "test"

isEqual(type: Int.self, a: any1, b: any2)      // true
isEqual(type: Int.self, a: any2, b: any3)      // false
isEqual(type: String.self, a: any3, b: any4)   // true
2020-07-07