【问题标题】:How to make Xcode automatically conform to a protocol如何使 Xcode 自动符合协议
【发布时间】:2018-12-18 04:41:12
【问题描述】:

当我使用原型表视图时,我总是必须遵守协议TableViewDataSource。总是忘记需要实现哪些方法,所以每次都要看协议的源码。这真的很耗时。

我认为 Xcode 必须具有自动为您实现所需方法的功能,对吗?就像 IntelliJ IDEA、Eclipse 和 Visual Studio。

我想知道在哪里可以找到此功能。如果没有,是否有解决方法?至少我不用每次都去遵守协议的源代码。

如果你不明白我的意思,这里有一些代码:

我有一个协议

protocol Hello {
    func doStuff ()
}

当我遵守它时,

class MyClass: Hello {

}

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

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

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

【问题讨论】:

  • 链接的答案是唯一的方法。在您创建了几个 tableview 控制器之后,这些方法将在您的记忆中:)
  • 据我了解这个问题,它与@AlessandroChiarotto 的上述链接不同。这里的这个问题是关于在我遵守协议时实现所需的功能。希望有人尽快知道答案。
  • Xcode 有一个很棒的地方:界面构建器,这个很棒。关于代码和开发功能,它只是一个简单的文本编辑器,甚至不要开始将它与 IntelliJ 进行比较:/
  • 我已经实现了一个Xcode plug-in 来为 Swift 和 ObjC 的缺失方法提供建议。

标签: ios xcode swift interface code-generation


【解决方案1】:

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

  1. 从顶部 Xcode 菜单(左上角)选择首选项。
  2. 选择键绑定。
  3. 搜索协议。你会发现命令叫做Refactor -> Add Missing Protocol Requirements
  4. 按 Key 列,然后添加您的快捷方式。 ex: cmd + shift + M

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

【讨论】:

  • 我像你的例子一样添加了密钥。我按相同但它没有显示我的协议方法。我在这里做错了什么请告诉我谢谢...
  • 这仅适用于缺少协议方法而不是可选的子继承,对吗?在那种情况下,菜单对我来说是空白的
【解决方案2】:

好吧,如果我理解您的问题,那么这里有一个解决方法:

尝试定义带有协议前缀的方法,如hello 这样您就不必记住方法,只需开始输入协议名称,XCODE 会提示您所有可用的方法,请参见此处:

如果您想要自动完成协议,请尝试 Snippets

【讨论】:

  • 非常感谢!这很有帮助!
  • 糟糕的命名实践几乎不是解决 IDE 缺陷的有效解决方案。
  • 根据 iOS 命名惯例,您可以在 AppDelegate 应用程序函数命名或 tableView 数据源命名中看到。也可以参考raywanderlichswift guidelines
  • 不错的解决方案! :)
  • 我发现这很讨厌,因为这阻碍了我常用的编程解决方法。我更喜欢通过重构添加缺失协议要求的内置功能。
【解决方案3】:

Xcode 9,负责实现 Swift 数据源和委托的强制方法。

看看这些快照,以UICollectionViewDataSource为例:

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

通过点击“修复”按钮,它添加了所有强制方法:

【讨论】:

  • 这是否需要开启特定设置?我仍然没有选择使用 Xcode 9.2 自动生成方法
  • @slackwars - 你能分享一下,你试过什么(哪种协议)。如果有任何强制执行的强制功能,则此警告/错误将可见。如果所有函数/方法都是可选的(或者如果您已经在代码中添加/实现了),则不会指示/显示此警告。
  • 类 ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    Xcode 不会为你做这件事。

    如果您查看协议的文档,它会清楚地标明您必须实现哪些功能:

    https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/

    【讨论】:

      猜你喜欢
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多