我有几个类都符合名为DataObject的协议。我有另一个类,它接收一个也符合DataObject的泛型类型,例如:
protocol DataObject {
func foo()
//...
}
class A : DataObject {
//...
}
class B : DataObject {
//...
}
class C : DataObject {
//...
}
class SomeClass<T: DataObject> {
//...
}
稍后在我的代码中,我有一个AnyObject类型的对象,我需要转换为SomeClass。我不知道SomeClass中对象的具体类型(并且不在乎)。但是,每当我这样做时:
var someClass = obj as? SomeClass<DataObject>
编译器给出了编译过程中似乎崩溃的错误 - &#34;命令由于信号而失败:分段错误:11&#34;。
在错误细节中间的某处,有一个崩溃的调用堆栈:
0 swift 0x000000010fecb2b8 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x000000010fecb794 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff87563f1a _sigtramp + 26
3 swift 0x00000001112b0637 llvm::DenseMapAPIntKeyInfo::getHashValue(llvm::DenseMapAPIntKeyInfo::KeyTy const&) + 151
4 swift 0x000000010f84db39 swift::irgen::emitWitnessTableRefs(swift::irgen::IRGenFunction&, swift::Substitution const&, llvm::SmallVectorImpl<llvm::Value*>&) + 329
5 swift 0x000000010f8280be emitNominalMetadataRef(swift::irgen::IRGenFunction&, swift::NominalTypeDecl*, swift::CanType) + 1310
6 swift 0x000000010f81a3d4 getTypeMetadataAccessFunction(swift::irgen::IRGenModule&, swift::CanType, swift::ForDefinition_t) + 580
7 swift 0x000000010f813526 swift::irgen::IRGenFunction::emitTypeMetadataRef(swift::CanType) + 54
8 swift 0x000000010f7dca9f swift::irgen::emitClassDowncast(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILType, swift::irgen::CheckedCastMode) + 143
9 swift 0x000000010f89ac89 emitValueCheckedCast((anonymous namespace)::IRGenSILFunction&, swift::SILValue, swift::SILType, swift::irgen::CheckedCastMode, swift::irgen::Explosion&) + 1065
10 swift 0x000000010f894bfa swift::SILVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::ValueBase*) + 23626
11 swift 0x000000010f88e39d swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 9901
12 swift 0x000000010f7f8f4f swift::irgen::IRGenModule::emitGlobalTopLevel() + 159
13 swift 0x000000010f878c59 performIRGeneration(swift::IRGenOptions&, swift::Module*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 2121
14 swift 0x000000010f879693 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 51
15 swift 0x000000010f7b5087 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 6647
16 swift 0x000000010f7b34e6 main + 1814
17 libdyld.dylib 0x00007fff8db4d5c9 start + 1
我真的陷入困境,因为我不能按照我应该的方式使用这个对象...为什么会发生这种情况或者更好的解决方法?