【发布时间】:2014-08-26 20:02:43
【问题描述】:
在 Objective-C 中,如果我想使用只存在于新版本 iOS 中的特定类,我会这样做:
if( [UIBlurEffect class] ) {
// do something with UIBlurEffect
}
else {
// gracefully fallback to old behavior
}
然而,等效的 Swift:
if UIBlurEffect.self != nil {
let blur: UIBlurEffect = UIBlurEffect(...)
// ...
else {
// ...
}
// also occurs with NSClassFromString("UIBlurEffect")
没有相同的功能。
如果在NSNewFeature 可用的环境中运行,一切都很好。但是如果没有定义类,启动应用程序时会出现链接错误:
dyld: Symbol not found: _OBJC_CLASS_$_UIBlurEffect
那么如何在 Swift 中做弱链接呢?
编辑 添加了UIBlurEffect 作为具体示例。
【问题讨论】:
-
我猜你应该使用可选的,比如 if let featureAvailable = NSNewFeature? {} 别的 {} 。但我对 swift 很陌生
-
对不起 NSNewFeature.self
-
@user102008 不是骗子——我想有条件地使用单个类
-
不应该是 [NSNewFeature class] 而不是 [NSNewFeatureClass class] 吗?或尝试其他语法: Class cls = NSClassFromString (@"NSRegularExpression"); if (cls) { // 创建一个类的实例并使用它。 } else { // 当类不可用时要遵循的备用代码路径。 }
标签: ios objective-c linker swift dynamic-linking