Objective-C 方法 ':' 提供​​的方法 ' ' 与协议中的可选要求方法 ' ' 冲突

Posted

技术标签:

【中文标题】Objective-C 方法 \':\' 提供​​的方法 \' \' 与协议中的可选要求方法 \' \' 冲突【英文标题】:Objective-C method ':' provided by method ' ' conflicts with optional requirement method ' ' in protocolObjective-C 方法 ':' 提供​​的方法 ' ' 与协议中的可选要求方法 ' ' 冲突 【发布时间】:2016-04-07 10:47:53 【问题描述】:

我有以下代码 func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) -> [Int] 并且我想从该方法返回一个 Int 数组,但我收到此错误

Objective-C 方法 'tableView:didDeselectRowAtIndexPath:' 提供​​的方法 'tableView(:didDeselectRowAtIndexPath:)' 与协议中的可选要求方法 'tableView(:didDeselectRowAtIndexPath:)' 冲突UITableViewDelegate'

我尝试在Int 后面加上一个感叹号,就像-> [Int]! 一样,但它没有解决错误。我在这里做错了什么?谢谢。

【问题讨论】:

【参考方案1】:

您的课程似乎实现了 UITableViewDelegate。接口 UITableViewDelegate 没有 tableView:didDeselectRowAtIndexPath: 的返回值,由于你的方法定义了返回类型,所以存在冲突。

如果您删除返回值,那么在您的情况下 [Int],它应该可以工作。 您不能定义具有相同签名但具有不同返回值的多个方法。签名(方法名+参数)必须是唯一的,所以你可以定义同名不同参数的方法,但不能定义同名/参数和不同返回类型的方法。

【讨论】:

感谢您的回复。那么在我取消选择该行后我将如何返回一些东西?如果这是一个愚蠢的问题,我很抱歉,我是 Swift 和 ios 开发的新手。 你不能。为什么要退货?例如,您可以调用另一个方法并传递一些参数并用它们做某事。谁应该收到返回值? tableView:didDeselectRowAtIndexPath: 由 UITableView 调用,所以无论如何你都不会得到返回值。 我的问题很复杂。基本上在该方法中,我将文件保存到目标,并且我希望能够从该文件中读取并从该方法返回一个整数数组。

以上是关于Objective-C 方法 ':' 提供​​的方法 ' ' 与协议中的可选要求方法 ' ' 冲突的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 在编译时禁止使用默认的Objective-C -init方法(并提供一个其他超类方法的示例,您可以使用它

理解 Objective-C 中的指定构造方法

Objective-C

《Objective-C 高级编程》 1.2.3节 alloc/retain/release/dealloc 实现——学习总结

Objective-C中的@property和@synthesize用法

IOS/Objective-C:用于识别命名实体的 NSLinguisticTagger