Swift 将类强制转换为子类失败
编辑-抱歉,伙计们,我认为我没有提供足够的细节: 在Parse的iOS框架中,它们是一个名为PFObject(ClassA)的类。该框架还允许您子类化(ClassB)PFObject。而且,如果出现我给出的场景,它们将是无问题 我的问题是这怎么可能?我理解子类可能包含主类中不存在的变量/方法,从而使将类强制转换为子类的过程变得不合理/不安全 他们有一个定义为PFSubclassing的协议,但我不知道这是如何允许这种行为发生的Swift 将类强制转换为子类失败,swift,parse-platform,Swift,Parse Platform,编辑-抱歉,伙计们,我认为我没有提供足够的细节: 在Parse的iOS框架中,它们是一个名为PFObject(ClassA)的类。该框架还允许您子类化(ClassB)PFObject。而且,如果出现我给出的场景,它们将是无问题 我的问题是这怎么可能?我理解子类可能包含主类中不存在的变量/方法,从而使将类强制转换为子类的过程变得不合理/不安全 他们有一个定义为PFSubclassing的协议,但我不知道这是如何允许这种行为发生的 我在操场上有以下几点: class ClassA: NSObjec
我在操场上有以下几点:
class ClassA: NSObject { }
class ClassB: ClassA { }
let objectA = ClassA()
let objectB = objectA as! ClassB // <- Crashes
类ClassA:NSObject{}
类别B:类别A{}
设objectA=ClassA()
让objectB=objectA为!ClassB/您知道继承是如何正确工作的吗?类B继承自类A。当您创建类A的实例,然后尝试将其转换为类B时,可能会发生许多不同的情况,因为这是未定义的行为。这里的问题是所谓的切片。编译器拒绝从父类向下转换为子类,因为它知道子类可能具有不同的信息(变量、func.等),并且不一定知道如何将这些信息转换为超级类子类的实例。然而,反过来几乎总是好的,即
let objectB = ClassB()
let objectA = objectB as? ClassA
子类从其超类继承所有功能,并可以添加自己的功能
从逻辑上讲,您只能从多功能转换为少功能(sub->super),但不能从多功能转换为少功能。谢谢您的回答。Parse的iOSSDK不知何故允许这种行为,我试图理解他们是如何做到的。他们有一个类PFObject(class a),并允许您从中创建任意类(比如class B)。然后允许您将PFObject的对象强制转换为所述任意类!可能涉及到方法swizzling?您的意思是如果让castedClass=classB as,则类似于?PFObject?
?谢谢您的回答。Parse的iOSSDK不知何故允许这种行为,我试图理解他们是如何做到的。他们有一个类PFObject(class a),并允许您从中创建任意类(比如class B)。然后允许您将PFObject的对象强制转换为所述任意类!可能涉及到方法切换?在幕后必须有额外的逻辑(和特定的要求)来处理这个问题。