我有一个自定义的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
,并且不会显示它们。
这是一个已知问题吗?有没有解决方法呢?