当我尝试强制转换 WKNSURLRequest (以及其他类,全部来自 WebKit 框架)时,我遇到了严重崩溃。
例如在游乐场:
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
以及。
有人知道可能是什么原因造成的吗?
WKNSURLRequest
不继承自NSObject
@interface WKNSURLRequest : WKObject <NSCopying>
And WKObject
是一个根类:
NS_ROOT_CLASS
@interface WKObject <WKObject>
与 Java 不同,Java 中所有类must继承自Object
, Obj-C 并不要求所有类都继承自NSObject
.
SwiftObj-C 桥明确支持NSObject
因此也适用于它的子类,但我不确定它是否可以同样好地处理所有其他根对象。在导出方面(Swift 类暴露给 Obj-C),甚至不可能创建自己的根类。一个可以简单地暴露给 Obj-C 的 swift 类must继承自NSObject
,所以我想说桥接器在设计时并未考虑到任意根类。
当然,这些都不能解释崩溃,这可能只是 Swift 编译器或 Swift 运行时中的一个简单错误。由于您不是静态引用这些类,而只是通过它们的名称来引用,因此一切都发生在运行时,并且 Swift 运行时可能只是假设无论发生什么NSClassFromString
返回是一个子类NSObject
当它尝试与该类交互时,这将在运行时失败,因为这种假设是完全错误的。在这种情况下,恕我直言,它仍然是一个错误,但它可以解释为什么会发生崩溃。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)