当前位置: 首页 > 知识库问答 >
问题:

检查对象是否为Swift中的给定类型

司徒光霁
2023-03-14

我有一个数组,它由AnyObject组成。我想对它进行迭代,并找到所有作为数组实例的元素。

如何在Swift中检查对象是否属于给定类型?

共有3个答案

冯和硕
2023-03-14

如果您只想知道对象是否是给定类型的子类型,那么有一种更简单的方法:

class Shape {}
class Circle : Shape {}
class Rectangle : Shape {}

func area (shape: Shape) -> Double {
  if shape is Circle { ... }
  else if shape is Rectangle { ... }
}

“使用类型检查运算符(is)检查实例是否属于某个子类类型。如果实例属于该子类类型,则类型检查运算符返回true;如果不是,则返回false。”摘自:苹果公司《Swift编程语言》我的书。

在上面,短语“某一子类类型”很重要。编译器接受使用is Circleis Rectangle,因为该值shape声明为shape(一个CircleRectangle的超类)。

如果您使用的是基元类型,则超类将是Any。以下是一个例子:

 21> func test (obj:Any) -> String {
 22.     if obj is Int { return "Int" }
 23.     else if obj is String { return "String" }
 24.     else { return "Any" }
 25. } 
 ...  
 30> test (1)
$R16: String = "Int"
 31> test ("abc")
$R17: String = "String"
 32> test (nil)
$R18: String = "Any"
夹谷沛
2023-03-14

在Swift 2.2-5中,您现在可以执行以下操作:

if object is String
{
}

然后过滤你的数组:

let filteredArray = originalArray.filter({ $0 is Array })

如果您有多种类型要检查:

    switch object
    {
    case is String:
        ...

    case is OtherClass:
        ...

    default:
        ...
    }
习高格
2023-03-14

如果要检查特定类型,可以执行以下操作:

if let stringArray = obj as? [String] {
    // obj is a string array. Do something with stringArray
}
else {
    // obj is not a string array
}

你可以用"as!"这将抛出一个运行时错误,如果obj不是类型[String]

let stringArray = obj as! [String]

您还可以一次检查一个元素:

let items : [Any] = ["Hello", "World"]
for obj in items {
   if let str = obj as? String {
      // obj is a String. Do something with str
   }
   else {
      // obj is not a String
   }
}
 类似资料:
  • 问题内容: 我有一个由组成的数组。我想遍历它,并找到所有属于数组实例的元素。 如何在Swift中检查对象是否为给定类型? 问题答案: 如果要检查特定类型,可以执行以下操作: 您可以使用“ as!” 如果类型不正确,则会引发运行时错误 您也可以一次检查一个元素:

  • 问题内容: 我需要保留Swift元类型的集合并编写一个函数,该函数将检查给定对象是否是其中之一的实例。我可以在Java中轻松做到这一点: 但是,我不知道如何在Swift中做到这一点: 这甚至可以在Swift中完成吗? 问题答案: 不幸的是,您目前只能对运算符使用命名类型,还不能对其使用任意的元类型值(尽管实际上 应该 可以使用IMO )。 假设您可以控制要与之进行比较的元类型的创建,则达到相同结果

  • 使用web3.utils.isBigNumber()方法检查给定的参数是否是一个 BigNumber.js对象表示的大数。 调用: web3.utils.isBigNumber(bignumber) 参数: bignumber - Object: 要检查的对象 返回值: Boolean:如果参数是BigNumber.js对象则返回true,否则返回false 实例代码: var number =

  • 问题内容: 有没有一种快速的方法来检查对象是jQuery对象还是本机JavaScript对象? 例: 显然,上面的代码有效,但并不安全。您可能会向对象添加选择器键并获得相同的结果。有没有更好的方法来确保该对象实际上是jQuery对象? 符合 问题答案: 您可以使用运算符: 说明 :该函数(又名)被实现为构造函数。构造函数将以前缀调用。 调用时,内部jQuery将此转换为1。JavaScript继续

  • web3.utils.isBN()方法用来检查给定的参数是否是一个BN.js实例对象。 调用: web3.utils.isBN(bn) 参数: bn - Object: 要检查的对象 返回值 Boolean:如果参数为BN对象则返回true,否则返回false 实例代码: var number = new BN(10); web3.utils.isBN(number); > true

  • 问题内容: 我正在玩Java的反射API,并尝试处理一些字段。现在,我要确定字段的类型。字符串很简单,只需执行即可。其他非派生类也是如此。但是,如何检查派生类?例如作为的子类。我无法找到任何或方法。我是否需要遍历所有人并自己找到超人? 问题答案: 您需要此方法: 一般情况下,(以上)应替换为并应替换为 从JavaDoc: 确定此对象表示的类或接口是否与指定参数表示的类或接口相同或超类或超接口。如果