我正在尝试为@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
修复问题,所以它对我来说不再是一个紧迫的问题,但我完全不知道为什么添加这个条件编译会产生如此奇怪的错误?