[英]Explicitly importing Objective-C properties into Swift as optionals
更新:从Xcode 6.3开始,现在可以通过可空性注释实现 。
我一直想知道是否有人想出一种方法将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中,你现在遇到了这个丑陋的问题,即知道你的属性可能是零,但必须避免隐式可选转换的美妙。 您将选择以下选项之一:
明确的零检查......
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中,有一个新的可空性注释功能可以启用此先前的私有功能。 因此,问题不再适用。
如果你检查API接口代码,你会发现有Swift和Objective C版本的类。 所以我猜这是Apple解决这个问题的方法吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.