在从基于Obj-C的框架派生的Swift类中(但也可以很容易地成为具有@objc属性的Swift类),我声明了两个存储的属性:
var optInt: Int?
var optString: String?
只有optString通过生成的-Swift.h标头暴露给Obj-C。
字符串?可能没有问题,因为它是使用可以为空的NSString对象公开的,因此桥接有一种表示无值的方法。
如果我删除?从optInt中,它公开了一个NSInteger类型,所以我可以看到,对于非可选的整数,它避免了对象,并将值类型桥接到值类型,但这是否意味着Int?不能暴露吗?
我似乎找不到任何明确说明这一点的文档。这里有一个不兼容的Swift功能的完整列表,它没有出现在上面:Using Swift from Objective-C
这里的用例是需要传递数字ID的典型情况,数字ID可以合法地为零。在之前的Swift世界中,NSNumber和nil正是我开始实现它的方式,但是试图将一个类迁移到Swift,但随后又专门出于这个原因而坚持使用Swift类中的Obj-C类型,这感觉是错误的。
我想我已经预想过Int?与Int不同的是,它会在后台作为一个NSNumber桥接,其潜在的nil值将提供给Swift中可选的"has no“元素。
我是不是漏掉了什么?重申一下,Swift可选Int (Int?)通过桥接暴露于Objective-C?
https://stackoverflow.com/questions/24221407
复制相似问题