gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:16 25 4
gpt4 key购买 nike

更新:从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com