我有,
public class Contact: NSObject {
var sName : String?
var sUserEmail : String?
var sUserCellNo : String?
}
以及ProductName-Swift.h中的相应代码,
SWIFT_CLASS("_NAME_")
@interface Contact : NSObject
@property (nonatomic, copy) NSString * sName;
@property (nonatomic, copy) NSString * sUserEmail;
@property (nonatomic, copy) NSString * sUserCellNo;
- (instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
所以我可以在我的其他目标C井中访问所有这些属性。
现在我必须在我的Contact类中添加新属性,因此它变为,
public class Contact: NSObject {
var iUserAddressID : Int? //newly added
var sName : String?
var sUserEmail : String?
var sUserCellNo : String?
}
但是在清理构建之后,我得到的ProductName-Swift.h与之前相同,
SWIFT_CLASS("_NAME_")
@interface Contact : NSObject
@property (nonatomic, copy) NSString * sName;
@property (nonatomic, copy) NSString * sUserEmail;
@property (nonatomic, copy) NSString * sUserCellNo;
- (instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
因此,我无法使用新添加的iUserAddressID。如何克服这个问题?
仅供参考:使用xcode6 beta4
答案 0 :(得分:3)
我怀疑它在将Int?
翻译成ObjC时犹豫不决。在ObjC中没有明显的形式。它可以是NSNumber
,也可以是NSInteger*
。对于ObjC中的这类问题,这两种问题都不是特别常见的方法(使用"魔术值"比如NSNotFound
或-1)更常见。您可以通过将其设为NSNumber?
而不是Int?
来解决此问题。快速的来电者应该自动为你搭桥。
如果您没有收到任何警告,我会打开一个雷达。如果NSObject
子类无法一直转换为ObjC,您应该得到一些指示。
这感觉就像你在尝试在对象数据结构中创建外键一样。如果是这样,更好的解决方案是创建一个UserAddress
类并使你的变量指向那个而不是一个Int(然后选项将正常工作)。