ProductName-Swift.h没有更新目标C文件中的相应一个

时间:2014-07-31 11:43:59

标签: ios objective-c swift ios8 xcode6

我有,

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

1 个答案:

答案 0 :(得分:3)

我怀疑它在将Int?翻译成ObjC时犹豫不决。在ObjC中没有明显的形式。它可以是NSNumber,也可以是NSInteger*。对于ObjC中的这类问题,这两种问题都不是特别常见的方法(使用"魔术值"比如NSNotFound或-1)更常见。您可以通过将其设为NSNumber?而不是Int?来解决此问题。快速的来电者应该自动为你搭桥。

如果您没有收到任何警告,我会打开一个雷达。如果NSObject子类无法一直转换为ObjC,您应该得到一些指示。

这感觉就像你在尝试在对象数据结构中创建外键一样。如果是这样,更好的解决方案是创建一个UserAddress类并使你的变量指向那个而不是一个Int(然后选项将正常工作)。