【问题标题】:Swift Protocol compilation error when using TARGET_INTERFACE_BUILDER使用 TARGET_INTERFACE_BUILDER 时出现 Swift 协议编译错误
【发布时间】:2015-12-04 09:50:48
【问题描述】:

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

【问题讨论】:

  • 你找到解决这个问题的方法了吗?

标签: ios swift interface-builder ibdesignable


【解决方案1】:

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

protocol TestProtocol {

#if TARGET_INTERFACE_BUILDER
    func myControl(control:AnyObject, colorForIndex index:UInt) -> UIColor?
#endif

#if TARGET_INTERFACE_BUILDER
    func myControl(control:AnyObject, textForIndex index:UInt) -> String?
#endif

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多