如何在Swift中使用AS和switch来获取类类型

15
我有一个SomeClass的数组,它是各种其他类的超类。
该数组中包含所有这些随机类。
是否有一种使用switch的方法(而不是else if let something = elm as? TheSubClassType)?
伪代码如下:
for AObjectOfTypeSomeClass in MyBigArray{
  switch the_type_of(AObjectOfTypeSomeClass){
    case SubClass1:
        let O = AObjectOfTypeSomeClass as! SubClass1
    ...
    ...
    ...
  }
}
1个回答

39
你离正确答案很近了。
for objectOfSomeClass in MyBigArray {
    switch objectOfSomeClass {
    case let subClass as SubClass1:
        // Do what you want with subClass
    default:
        // Object isn't the subclass do something else
    }
}

我找到的最好的模式匹配概述在这个网站上。 http://appventure.me/2015/08/20/swift-pattern-matching-in-detail/


我知道它是如何工作的,但从逻辑上讲,我不理解这个语法的某些地方。例如,为什么as不是可选的? - Itay Moav -Malimovka
2
as关键字不是可选的,因为你正在进行模式匹配,而不是绑定。绑定将会像这样,并需要可选转换:if let subClass = anObject as? SubClass { }。我承认这有点反直觉,因为它们都可以实现类似的目标。 - Mr Beardsley
@Itay:在case语句中使用asas?,请参考https://dev59.com/uY3da4cB1Zd3GeqP2qOc。 - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接