0

我有一个包含两个CGFloats 的自定义 Objective-C 类:

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

两者都标记为IBInspectable。在类的初始化程序中,我设置了两个 botNaN因为我需要表示0nothing之间的差异。为了让这个类在 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
    }
}

从代码中使用我的类时,这非常有用。使用 SwiftNaN时将被映射到nil,我可以像往常一样使用可选的展开。

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

这是一个已知的问题?有什么解决方法吗?

4

0 回答 0