我有一个包含两个CGFloat
s 的自定义 Objective-C 类:
@property (nonatomic, assign) IBInspectable CGFloat minimumConstant NS_REFINED_FOR_SWIFT;
@property (nonatomic, assign) IBInspectable CGFloat maximumConstant NS_REFINED_FOR_SWIFT;
两者都标记为IBInspectable
。在类的初始化程序中,我设置了两个 botNaN
因为我需要表示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
}
}
从代码中使用我的类时,这非常有用。使用 SwiftNaN
时将被映射到nil
,我可以像往常一样使用可选的展开。
问题是,一旦我添加NS_REFINED_FOR_SWIFT
Interface Builder 将不再将我的属性识别为IBInspectable
并且不会显示它们。
这是一个已知的问题?有什么解决方法吗?