我有一个包含两个不同类的NSArray,一个是Swift(ClassS),另一个是Objective-C(ClassO)。下面是它内部的一个示例:
NSArray *allObjects=@[classOObject,classSObject,classOObject,classSObject,etc.];
在一个Swift单元测试文件中,我循环遍历这个数组,只对ClassS对象进行一些测试。

for thisObject in allObjects{
  if thisObject is ClassS{
    // do stuff
  }
}

thisObject is ClassS表达式总是计算为false;为什么会发生这种情况?如果我用if thisObject is ClassO替换If语句,那么它在检测ClassO对象时就可以正常工作。
其他一些可能相关或可能无关的要点:
在XCode的Variables视图中,thisObject的类对于ClassO对象是ClassO ClassO,但是对于class s对象是MyApp.ClassS ClassS。
在Variables视图中,数组的类名是[AnyObject]!
类和类o都继承自同一个目标C超类,它本身是NSManagedObject的子类。
MyAppTests bridgeing Header.h同时将ClassO.h和公共超类导入ClassO.h和ClassS.h
if thisObject is ClassSif let castedObject = thisObject as? ClassS替换thisObject.isKindOfClass(ClassS)没有效果
谢谢你的阅读,任何想法都会很棒。

最佳答案

你试过使用if let吗?

for thisObject in allObjects{
  if let thisObject = thisObject as? ClassS {
    // do stuff
  } else if let thisObject = thisObject as? ClassO {
    // do stuff
  } else {

  }
}

关于ios - 需要将NSArray的元素强制转换为Swift类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30325509/

10-08 20:40