Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何知道如何遵守Swift中的特定协议?_Swift_Swift2_Protocols - Fatal编程技术网

我如何知道如何遵守Swift中的特定协议?

我如何知道如何遵守Swift中的特定协议?,swift,swift2,protocols,Swift,Swift2,Protocols,当我声明一个类要符合某个协议时,Swift将向我显示一条消息,说明在满足该协议的所有要求之前,我不符合该协议 有没有办法让编译器给我提供更具体的细节,说明我缺少了哪些需求,或者为什么我不符合该协议,或者我总是需要将该协议的源代码与我的类的源代码并排打开,并进行手动眼珠比较 澄清一下,我并没有特别询问任何特定的协议,事实上我真的在寻找更好的支持来实施我自己的协议 有没有办法让编译器给我提供关于我缺少哪些需求的更具体的细节 是的,完整的编译器输出会准确地告诉您缺少哪些需求: 转到“报告导航器”,c

当我声明一个类要符合某个协议时,Swift将向我显示一条消息,说明在满足该协议的所有要求之前,我不符合该协议

有没有办法让编译器给我提供更具体的细节,说明我缺少了哪些需求,或者为什么我不符合该协议,或者我总是需要将该协议的源代码与我的类的源代码并排打开,并进行手动眼珠比较

澄清一下,我并没有特别询问任何特定的协议,事实上我真的在寻找更好的支持来实施我自己的协议

有没有办法让编译器给我提供关于我缺少哪些需求的更具体的细节

是的,完整的编译器输出会准确地告诉您缺少哪些需求:

  • 转到“报告导航器”,cmd 8
  • 选择最后一次生成
  • 对于每个已编译的文件,右侧有一个图标,该图标将打开 编译器的完整文本输出
简单的例子:

class A : Equatable {
}
编译器输出:

error: type 'A' does not conform to protocol 'Equatable' class A : Equatable { ^ Swift.Equatable:28:17: note: protocol requires function '==' with type '(A, A) -> Bool' public func ==(lhs: Self, rhs: Self) -> Bool 错误:类型“A”不符合协议“Equalable” A类:可平衡{ ^ Swift.Equatable:28:17:注意:协议要求函数“==”的类型为“(A,A)->Bool” 公共函数==(左:自,右:自)->Bool
Issue Navigator
(左侧面板上的感叹号图标,或
CMD+4
)将显示不符合哪些协议以及原因:


Xcode 9,有助于实现Swift数据源和委托的所有强制方法

以下是
UITableViewDataSource
的示例:

显示实现强制方法的警告/提示:

单击“修复”按钮,它将在代码中添加所有必需的方法:


您来自
Ruby
?)在Swift中,您应该实现与Objective-C不同的所有协议方法和属性。您可以从协议声明中复制它们:)可能可以创建一个运行脚本阶段来完成您需要的任务,但我不擅长脚本。@kelin:这不完全正确,协议方法可以有default实现。请参阅示例:为了符合该协议,您不必实现
struct CollectionType
中列出的所有方法。我认为问题导航器中列出的错误也有一个“披露”三角形,您可以单击该三角形来显示详细信息(在本例中,哪些方法未实现)。这个答案也很有帮助,但我将使用问题导航器解决方案作为公认的答案,因为它稍微方便一些。编辑:我也测试过它,发现它也非常适合检查历史问题。也就是说,你可以检查过去失败的构建并查看原因的详细信息。非常好。