当前位置: 首页 > 面试题库 >

如何比较“任何”值类型

伯和蔼
2023-03-14
问题内容

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

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 <>’)操作数”

这样做的方式是什么?


问题答案:

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

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


 类似资料:
  • 问题内容: 以这个为例(摘自Java regexchecker不起作用): 是否用于检查的值是否重要? 我知道有这是颇为相似。但是,很明显,这个问题只针对原始对象,而不是对象包装器;因此,将不适用。 另外,应该以不同于其他的方式对待? 问题答案: 从您的评论看来,您正在寻找使用包装器类的“最佳实践” 。但是实际上 并没有 最佳实践,因为使用此类开始是一个坏主意。使用对象包装的唯一原因是在您绝对 必

  • 我不知道如果没有其他变量告诉我哪个更大,我怎么能比较两个可比较的对象。问题是:创建一个名为Max的类,该类提供一个名为Max的类方法。Max将两个参数用于可以比较的对象,即实现如上所示的Java Compariable接口的对象。它返回对较大值的引用。如果两个对象相等,则应返回第一个对象。实现的可比性取决于每个类,您的方法将在多个不同类型的对象上调用。 它在接口中提供了int compareTo(

  • 我想比较两个物体。然而,当我运行它时,它告诉我它们不匹配,尽管它们匹配。请让我知道我做错了什么,谢谢。下面是我的代码:

  • 问题内容: 我正在使用sqlite数据库。我的表架构是 表中的内容是这样的: 我使用以下sql语句选择名称及其按名称和dt分组的相应分数总和。 我有 现在,我想扩展查询,以便sql语句可以搜索其分数总和在不同时间(dt)不变的内容。在这种情况下,输出应为: 如何编写这样的sql? 问题答案: 这可以通过自我(反)联接来实现:

  • 我有一个集合,我想比较它是否包含所有的值。 这就是我想要的 我相信一定有其他方法来检查,而不是重复。

  • 我有以下课程: 这编译没有问题。但是,如果我尝试像这样内联变量: 我发现以下编译错误: 如何编写此表达式以使Java正确理解参数?