我有一个包含两个不同类的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 ClassS
或if 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/