当我尝试使用WKNSURLRequest(和其他类,都来自WebKit框架)时,我遇到了严重的崩溃。
e.g。在操场上:
import UIKit
import WebKit
final class Sigh: NSObject { }
NSClassFromString("NSObject") as? Sigh.Type
NSClassFromString("WKNSURLRequest") as? Sigh.Type
来自NSObject的强制转换(即返回nil
),但WKNSURLRequest的强制转换与EXC_BAD_ACCESS崩溃 - 我原以为它也会返回nil
。
任何人都有任何想法可能导致这个?
答案 0 :(得分:3)
WKNSURLRequest
不会继承NSObject
@interface WKNSURLRequest : WKObject <NSCopying>
WKObject
是一个根类:
NS_ROOT_CLASS
@interface WKObject <WKObject>
与Java不同,所有类必须来自Object
,Obj-C不要求所有类都从NSObject
继承。
Swift&lt; - &gt; Obj-C桥接器明确支持NSObject
,因此也支持其子类,但我不确定它是否可以同样好地处理所有其他根对象。在导出方面(Swift类暴露给Obj-C),甚至不可能创建自己的根类。一个快速的类应该暴露给Obj-C,只需必须继承自NSObject
,所以我要说这个桥的设计没有任意根类。
当然,这些都没有解释崩溃,这可能只是Swift编译器或Swift运行时中的一个简单错误。由于您没有静态引用类,而只是按名称引用类,所有内容都在运行时发生,Swift运行时可能只是假设NSClassFromString
返回的是NSObject
的子类,然后它尝试进行交互使用该类,这将在运行时失败,因为这个假设是完全错误的。在那种情况下,它仍然是一个错误恕我直言,但它可以解释为什么会发生崩溃。