使用NS_REFINED_FOR_SWIFT

时间:2017-02-13 19:31:24

标签: objective-c swift xcode interface-builder bridging

我有一个自定义的Objective-C类,其中包含两个CGFloat s:

@property (nonatomic, assign) IBInspectable CGFloat minimumConstant NS_REFINED_FOR_SWIFT;
@property (nonatomic, assign) IBInspectable CGFloat maximumConstant NS_REFINED_FOR_SWIFT;

两者都标记为IBInspectable。在类的初始化程序中,我设置了两个bot NaN,因为我需要表示 0 nothing 之间的区别。为了使类很好地使用Swift,我将这两个属性标记为NS_REFINED_FOR_SWIFT并使用精炼的实现创建了一个Swift扩展:

@IBInspectable public var minimumConstant: CGFloat? {
    get {
        let constant = __minimumConstant
        return constant.isNaN ? nil : constant
    }
    set {
        if let constant = newValue {
            __minimumConstant = constant
            return
        }
        __minimumConstant = CGFloat.nan
    }
}

@IBInspectable public var maximumConstant: CGFloat? {
    get {
        let constant = __maximumConstant
        return constant.isNaN ? nil : constant
    }
    set {
        if let constant = newValue {
            __maximumConstant = constant
            return
        }
        __maximumConstant = CGFloat.nan
    }
}

从代码中使用我的类时,这非常有用。使用Swift时NaN将映射到nil,我可以像往常一样使用可选的解包。

问题是我添加NS_REFINED_FOR_SWIFT后,Interface Builder将不再将我的属性识别为IBInspectable ,并且不会显示它们。

这是一个已知问题吗?有没有解决方法呢?

0 个答案:

没有答案