gpt4 book ai didi

ios - 使用 TARGET_INTERFACE_BUILDER 时出现 Swift 协议(protocol)编译错误

转载 作者:可可西里 更新时间:2023-10-31 23:44:24 28 4
gpt4 key购买 nike

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

我已将我的问题提炼为以下代码片段。我的协议(protocol)看起来像这样:-

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

编译失败,并显示一条暗示方法重载错误的消息:“错误:声明与先前值冲突”。错误消息出现在第二个函数声明中,并将第一个函数引用为与其冲突的前一个声明。

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

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

最佳答案

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

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

}

关于ios - 使用 TARGET_INTERFACE_BUILDER 时出现 Swift 协议(protocol)编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085366/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com