ios - 将 Objective-C 属性显式导入 Swift 作为可选值

标签 ios objective-c swift

更新:从 Xcode 6.3 开始,这现在可以通过 nullability annotations 实现.

我一直想知道是否有人想出一种方法将 Obj-C 属性作为可选属性显式导入 Swift。

问题

考虑以下 ObjC 类:

@interface Foo : NSObject
@property (strong, nonatomic) NSObject* potentiallyNil;
@end

这很好,但是当你在 Swift 中使用它时,Xcode 倾向于将属性导入为实例本身或作为隐式展开的可选。

我见过这两者兼而有之

class Foo : NSObject {
var potentiallyNil : NSObject
}

还有

class Foo : NSObject {
var potentiallyNil : NSObject!
}

问题来了 - 在 Swift 中,您现在遇到了这个丑陋的问题,即知道您的属性可能为 nil,但必须避免隐式可选转换的美妙之处。您剩下以下选项之一:

一个显式的 nil 检查...

if(potentiallyNil == nil) {
  bar()
}

或者通过解包手动转换为可选类型——同样丑陋...

let manuallyWrappedPotentiallyNil : NSObject? = potentiallyNil
if let unwrapped = manuallyWrappedPotentiallyNil {
   bar();
}

这两者似乎都远非理想。在我看来,必须有办法解决这个问题!事实上,正如@matt 指出的那样,Apple 在整个测试版中都自己完成了这项工作,同时“审计可选的合规性”。我们可以这样做吗?

问题

归结为:给定 ObjC 属性

@property (strong, nonatomic) NSObject* potentiallyNil;

有没有一种方法可以使用签名将其导入到 Swift 中

var potentiallyNil : NSObject?

非常感谢所有其他 iOS/OS X 开发人员。

最佳答案

在问这个问题时,这是不可能的。但是,在 Xcode 6.3 中,有一个新的 nullability annotation。功能以启用此以前的私有(private)功能。因此问题不再相关。

关于ios - 将 Objective-C 属性显式导入 Swift 作为可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924606/

相关文章:

ios - 键值观察的新手;为什么我无法在我的 AppDelegate 中监控 int 的值?

ios - 在 XCode 5 中查看类/协议(protocol)层次结构

ios - 如何从iOS中为for循环创建的所有文本字段中获取文本

arrays - iOS : In Swift 3, 如何从二维数组中的某个部分中删除最后 n 行?

objective-c - 贝塞尔路径看是否交叉

ios - 您可以本地化 Custom.plist 文件吗?

ios - 在 View 中转换 SwiftUI 元素

ios - SceneKit自定义几何纹理错误

swift - 将数据存储在核心数据中的自定义类数组中

ios - 我们可以在 Swift 中使结构中的 Codable 键不区分大小写吗