在Objective-C中,如果我想使用仅出现在新版iOS中的特定类,我会这样做:
if( [UIBlurEffect class] ) {
// do something with UIBlurEffect
}
else {
// gracefully fallback to old behavior
}
Run Code Online (Sandbox Code Playgroud)
但是,等效的Swift:
if UIBlurEffect.self != nil {
let blur: UIBlurEffect = UIBlurEffect(...)
// ...
else {
// ...
}
// also occurs with NSClassFromString("UIBlurEffect")
Run Code Online (Sandbox Code Playgroud)
没有相同的功能.
如果在NSNewFeature可用的环境中运行,一切都很好.但是如果未定义类,则在启动应用程序时会出现链接错误:
dyld: Symbol not found: _OBJC_CLASS_$_UIBlurEffect
Run Code Online (Sandbox Code Playgroud)
那么如何在Swift中进行弱链接?
编辑添加UIBlurEffect为特定示例.
我正在处理一个我无法链接的Objective-C类的场景:
__attribute__((weak_import))
@interface MyClass : NSObject @end
Run Code Online (Sandbox Code Playgroud)
我也在我的Swift代码中使用这个类:
let myObject : MyClass = MyClass()
Run Code Online (Sandbox Code Playgroud)
但是,这在运行时总会崩溃swift_getObjCClassMetadata,即使我只是在渲染已经是类型的对象MyClass
let myObject : MyClass = otherObj as? MyClass
Run Code Online (Sandbox Code Playgroud)
有没有办法成功转换或利用Swift中的这些类?