使用TARGET_INTERFACE_BUILDER

时间:2015-12-04 09:50:49

标签: ios swift interface-builder ibdesignable

我正在尝试为@IBDesignable控件生成示例数据,因此在为IB构建时,我正在欺骗控件成为自己的数据源。结果是我在协议中添加了一些仅供IB使用的方法,作为一个好公民,我希望将其删除为常规(非IB版本)。

我已将问题归结为以下代码片段。我的协议如下: -

protocol TestProtocol {
#if TARGET_INTERFACE_BUILDER
    func myControl(control:AnyObject, colorForIndex index:UInt) -> UIColor?
    func myControl(control:AnyObject, textForIndex index:UInt) -> String?
#endif
}

这无法编译,其中的消息暗示了方法重载错误:"error: declaration conflicts with previous value"。错误消息在第二个函数声明中,并引用第一个函数作为它与之冲突的前一个声明。

但这些不是重载,由于命名参数,它们具有不同的签名。这是跨Cocoa的这种标准委托命名约定,我无法在不理解原因的情况下重命名我的方法。

删除#if TARGET_INTERFACE_BUILDER修复了问题,因此对我来说不再是一个紧迫的问题,但我完全难以理解为什么添加此条件编译会产生如此奇怪的错误?

1 个答案:

答案 0 :(得分:0)

我不确定为什么会这样,但碰巧找到了合理的解决方法 只需将两个声明分开,如下所示:

  request({
    url: url,
    json: true,
    pool: {maxSockets: Infinity},
    timeout: 2000
  })