【问题标题】:ProductName-Swift.h not updating on changing respective one of objective C fileProductName-Swift.h 在更改相应的目标 C 文件时未更新
【发布时间】:2014-07-31 11:43:58
【问题描述】:

我有,

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

【问题讨论】:

    标签: ios objective-c swift ios8 xcode6


    【解决方案1】:

    我怀疑它在将 Int? 转换为 ObjC 时犹豫不决。这在 ObjC 中没有明显的形式。它可以是NSNumber,也可以是NSInteger*。对于 ObjC 中的此类问题,这两种方法都不是特别常见的方法(更常见的是使用像 NSNotFound 或 -1 这样的“神奇值”)。您可以通过将其设为NSNumber? 而不是Int? 来解决此问题。 Swift 调用者应该会自动为你桥接。

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

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

    【讨论】:

    • 从 Xcode 8 开始它仍然会这样做,也没有任何警告 - 在我的情况下是 Bool?
    猜你喜欢
    • 1970-01-01
    • 2019-11-13
    • 2015-07-23
    • 2015-06-07
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多