Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将Objective-C属性作为可选项显式导入Swift_Ios_Objective C_Swift - Fatal编程技术网

Ios 将Objective-C属性作为可选项显式导入Swift

Ios 将Objective-C属性作为可选项显式导入Swift,ios,objective-c,swift,Ios,Objective C,Swift,更新:从Xcode 6.3开始,现在可以通过。 我一直在想,是否有人找到了一种方法,可以将Obj-C属性显式地作为可选项导入Swift 问题 考虑以下ObjC类: @interface Foo : NSObject @property (strong, nonatomic) NSObject* potentiallyNil; @end 这很好,但当您在Swift中使用它时,Xcode倾向于将该属性作为实例本身或隐式展开的可选属性导入 我看到这两种情况都出现了 class Foo : NSObj

更新:从Xcode 6.3开始,现在可以通过。

我一直在想,是否有人找到了一种方法,可以将Obj-C属性显式地作为可选项导入Swift

问题

考虑以下ObjC类:

@interface Foo : NSObject
@property (strong, nonatomic) NSObject* potentiallyNil;
@end
这很好,但当您在Swift中使用它时,Xcode倾向于将该属性作为实例本身或隐式展开的可选属性导入

我看到这两种情况都出现了

class Foo : NSObject {
var potentiallyNil : NSObject
}
以及

现在的问题是——在Swift中,你现在遇到了一个丑陋的问题,知道你的属性可能为零,但必须避免隐含可选转换的美妙之处。您只剩下以下选项之一:

显式零检查

if(potentiallyNil == nil) {
  bar()
}
或者手动转换为带有展开的可选类型-也很难看

let manuallyWrappedPotentiallyNil : NSObject? = potentiallyNil
if let unwrapped = manuallyWrappedPotentiallyNil {
   bar();
}
这两种情况似乎都很不理想。在我看来,一定有办法解决这个问题!事实上,正如@matt所指出的,苹果在整个beta中都是这样做的,“审计可选的合规性”。我们能做同样的事吗

问题

它归结为:给定ObjC属性

@property (strong, nonatomic) NSObject* potentiallyNil;
是否有办法将其导入Swift并签名

var potentiallyNil : NSObject?

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

如果您检查API接口代码,您将看到类的Swift和Objective C版本。所以我想这就是苹果解决这个问题的方法?

在提出这个问题时,这是不可能的。然而,在Xcode 6.3中,有一个新特性来启用这个以前私有的功能。因此,这个问题不再相关。

这必须是可能的,因为可可原料药可以做到这一点;它们区分
类型
类型,和
类型?
。API已经为此进行了手工调整。他们的选择并不总是正确的,但他们做到了。但我不知道他们是怎么做到的。也许他们在字体上贴了一些标记…@马特,是的,这正是我的观点。通过beta,他们一直在“审计”api以获得可选的遵从性。我希望有一种方法可以让我们这些卑微的最终用户开发者做到这一点。希望答案不是“它在UIKit中是硬编码的!”可能与Xcode 6.3β和Swift 1.2中提到的相同,使用
\uu nullable
等添加对该功能的支持。@BrianNickel更正。忘记更新问题-现在将其标记为已关闭。很可能是这样。可悲的是,这对其他任何人都没有帮助。希望苹果能很快推出我们可以利用的解决方案。
var potentiallyNil : NSObject?