如何让Xcode自动符合协议

24
当我使用原型表视图时,我总是需要遵循TableViewDataSource协议。我总是忘记需要实现哪些方法,所以每次都必须查看协议的源代码,这真的很耗时间。
我认为Xcode必须有一个功能可以自动为您实现所需的方法,对吧?就像IntelliJ IDEA、Eclipse和Visual Studio一样。
我想知道在哪里可以找到这个功能。如果没有,是否有解决办法?至少我不必每次遵循协议时都打开协议的源代码。
如果你不明白我的意思,这里有一些代码:
我有一个协议。
protocol Hello {
    func doStuff ()
}

当我遵从它时,

class MyClass: Hello {

}

我经常不记得需要实现的方法的名称。如果Xcode有一个功能可以将上面的代码转换成这样:

class MyClass: Hello {
    func doStuff () {
        code
    }
}

现在你明白我的意思了吗?我只是想问在哪里可以找到这样的功能。


2
请参考类似问题:https://dev59.com/SV4c5IYBdhLWcg3w-OQ4 - chiarotto.alessandro
链接的答案是唯一的方法。当你创建了几个tableview控制器后,这些方法就会在你的记忆中 :) - Paulw11
据我理解,这个问题与@AlessandroChiarotto提供的链接不同。这个问题是关于在遵循协议时实现所需函数的。希望有人能尽快回答。 - AlexWoe89
Xcode 的优点在于它的界面构建器,那个真是太棒了。但就代码和开发功能而言,它只能与简单的文本编辑器相媲美,甚至不要试图将其与 IntelliJ 相比较 :/ - luk2302
我实现了一个Xcode插件,可以为Swift和ObjC提供缺失方法的建议。 - Bryan Chen
5个回答

16

Xcode 9:您可以通过向键绑定集中添加新的快捷方式来添加缺少的协议要求。

  1. 从 Xcode 菜单(左上角)中选择“首选项”。
  2. 选择“键绑定”。
  3. 搜索“protocol”。您将找到名为 Refactor -> Add Missing Protocol Requirements 的命令。
  4. 点击“Key”列,然后添加您的快捷键。例如:cmd + shift + M

现在,您可以通过单击类名称(或其扩展名),然后按下您的快捷键来添加缺少的协议要求。

enter image description here


我按照你的示例添加了键。我正在按同样的方式操作,但它没有显示我的协议方法。请告诉我我在这里做错了什么,谢谢... - Yogesh Patel
这只针对缺失的协议方法,而不是可选的子继承权,对吗?在这种情况下,我的菜单是空白的。 - fobbymaster

6

Xcode 9会自动实现Swift数据源和代理方法。

看这些快照,以UICollectionViewDataSource为例:

指示要实现协议方法的警告:

enter image description here

通过点击“Fix”按钮,它已经添加了所有必须的方法:

enter image description here


这需要特定的设置开启吗?我仍然没有在Xcode 9.2中获得自动生成方法的选项。 - slackwars
@slackwars - 你能分享一下你尝试过哪个协议吗?如果有任何强制实现的必要函数,这个警告/错误将会显示出来。如果所有的函数/方法都是可选的(或者如果你已经在你的代码中添加/实现了它们),那么这个警告就不会被指示/显示出来。 - Krunal
类 ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { - slackwars
链接到 gist 图片:[link]https://gist.github.com/linuxjet/bed2add074ef32fe38639e9c5809fe2e - slackwars

6
如果我理解你的问题正确,下面是一个解决方法:
尝试用协议作为前缀定义方法,比如这里的 hello,然后你就不用记住方法名,只需开始输入协议名称,XCODE 就会提示可用的所有方法,如下图所示: enter image description here 如果你想要自动完成协议,请尝试使用 Snippets

23
糟糕的命名惯例并不是解决IDE缺陷的有效方法。 - Raphael
这是根据iOS命名规范的,正如您可以在AppDelegate应用程序函数命名或tableView数据源命名中看到的那样。您还可以参考raywanderlich swift guidelines - Hamza Ansari
我觉得这很讨厌,因为这妨碍了我的常见编程解决方案。我更喜欢通过重构来添加缺失的协议要求的内置功能。 - Maschina

3

与Amjad的帖子非常相似,Xcode 9/10带来了在代码编辑器中添加缺少协议要求的功能。

只需“右键单击”类名:“重构” -> “添加缺少的协议要求” enter image description here


-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接