我有过,
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中访问所有这些属性。
现在我不得不在我的联系人类中添加新属性,这样它就变成了,
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
最佳答案
我怀疑它在将Int?
转换为ObjC时遇到了障碍。在ObjC中没有明显的形式。它可以是NSNumber
或NSInteger*
。对于ObjC中的此类问题,这两种方法都不是特别常见的(更常见的是使用NSNotFound
或-1这样的“魔法值”)。您可以通过将其设置为NSNumber?
而不是Int?
来解决这个问题。快速来电者会自动为您转接。
如果你没有收到任何警告,我会打开雷达。如果NSObject
子类不能一直转换为ObjC,您可能会得到一些指示。
这感觉像是在试图在对象数据结构中创建外键。如果是这样,更好的解决方案是创建一个UserAddress
类,并使变量指向该类,而不是指向一个Int(那么optionals将工作正常)。