相关疑难解决方法(0)

如何在Swift中进行弱链接?

在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为特定示例.

linker objective-c dynamic-linking ios swift

16
推荐指数
1
解决办法
2856
查看次数

Swift中的弱链接

我正在处理一个我无法链接的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中的这些类?

macos objective-c swift

6
推荐指数
0
解决办法
431
查看次数

标签 统计

objective-c ×2

swift ×2

dynamic-linking ×1

ios ×1

linker ×1

macos ×1