【问题标题】:Xcode does not autocomplete memberwise initializer of a StructXcode 不会自动完成 Struct 的成员初始化程序
【发布时间】:2016-01-30 12:20:33
【问题描述】:

我在我的 Xcode 项目文件中的 Point.swift 中定义了一个这样的结构:

struct Point {
    var x: Int
    var y: Int
}

如果我尝试从另一个文件初始化 Point 结构,Xcode 不会自动完成成员初始化程序。即使我已经按照一些朋友的建议重新启动了机器。

但自动完成工作正常,如果我在同一个文件或游乐场定义初始化一个新实例。

任何想法如何解决这个自动完成问题?

【问题讨论】:

  • 这很奇怪。请注意,您第二次在新文件中使用 Point 时,它将自动完成。

标签: xcode swift


【解决方案1】:

这似乎只是 Xcode 中的一个错误。第一次在另一个文件中使用实例时,Xcode 不提供自动完成功能。但是,第二次使用它。

这是我看到的奇怪行为的演示。即使保存了Point.swift 文件,我第一次在ViewController.swift 中使用Point 时也不会自动完成,但第二次会:

这是 Xcode 7.2。

【讨论】:

  • 我在 Xcode 7.3beta 中看到了完全相同的行为。
  • viewDidLoad 中使用Point 后,我尝试在另一种方法中使用它,但它没有自动完成。它似乎只有在您已经以相同的方法使用过一次时才有效。
  • 我在 Xcode 9.3 中看到了类似的行为,但仅限于函数之外。 (它在 viewDidLoad 和其他函数中对我有用。)我发现你甚至不必在第一次完成带有参数的构造函数——只需在一行上输入 'let p = Point' 就足以让自动完成在下一个。多么奇怪。
  • 我可以确认这仍然是 Xcode10 中的一个错误,并且建议的解决方案(第二次输入时会显示自动完成)对我仍然有效。
  • 仍然是 xcode 11 中的一个错误。还取决于 有时 .init(...) 和其他解决方法有效,有时无效。
【解决方案2】:

此错误在 Xcode 10 中仍然存在。作为最佳答案的补充:您可以使用显式 .init 进行自动完成,然后删除 .init

  1. 让自动完成功能与显式初始化一起使用:

Point.init(x: x, y: y)

  1. 删除.init,您将得到预期的代码:

Point(x: x, y: y)

【讨论】:

  • 点评来源: 嗨,这篇文章似乎没有为问题提供quality answer。请编辑您的答案并改进它,或者将其作为对其他答案的评论发布。
【解决方案3】:

正如 Михаил Бабаев 所说,我在 Xcode 10.1 中仍然看到这个问题。

打字 Point.init( 调出默认初始化程序。 然后你可以删除'init'

【讨论】:

    【解决方案4】:

    保存您的文件。

    保存 Point.swift 后,Xcode 将正确自动完成

    我知道这看起来很奇怪,但是尽管 Xcode 识别结构并在编辑文件时正确启用语法着色,但它仍然不会完全自动完成,直到结构源文件被确定保存(文件图标将改变其背景颜色) .

    我过去曾遇到过这种行为,我只是能够在示例项目中重现它。

    【讨论】:

    • 我也是这么想的。但事实并非如此。即使保存了所有文件,当您第一次在另一个文件中使用 Point 时,它也不会自动完成。第二次使用 Point 它会自动完成。
    • @vacawama 嗯。在一个新项目中,我可以像在我的答案中那样重现它,但我不能像在您的评论中那样重现它。这太奇怪了。 :P
    • 我使用的是 Xcode 版本 7.2 (7C68)。我在名为Point.swift 的文件中将Point 定义为struct。你有什么不同的做法吗?
    • 7.3beta,但过程与您和 OP 完全相同。我还使用删除/保存/粘贴而不保存等进行了测试。同样:它的行为与 OP 完全一样,然后我保存 Point.swift,它的行为就像我的答案一样。
    • @EricD。保存了 Point.swift 文件,但仍然没有在另一个文件中获得自动完成
    【解决方案5】:

    如果你输入Point.init( Xcode 建议初始化自动完成。

    更多令人兴奋的新闻:从 Xcode 10.2 开始,这似乎已修复,现在如果您只提示 Point( Xcode 建议使用 init 方法。尽情享受吧。

    【讨论】:

      【解决方案6】:

      我在 Xcode 版本 11.4.1 (11E503a) 中遇到了同样的问题。对我来说,问题是我的结构是在与我的应用程序目标不同的目标中定义的。该目标已导入我试图在其中创建该结构的实例的文件中(在应用程序目标中)。但是,Xcode 永远无法自动完成该结构。我通过将结构的定义移动到应用程序目标解决了这个问题,它按预期自动完成了成员初始化程序。

      我们玩得开心吗?

      【讨论】:

        【解决方案7】:

        对我来说,这是一个自我诱发的错误。我不明白为什么它不提供自动完成选项。对结构进行了几次检查后才意识到,即使我有一堆属性,它们都被定义为静态的——没有什么可以初始化的!嘘

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-16
          • 1970-01-01
          • 1970-01-01
          • 2012-12-17
          • 1970-01-01
          相关资源
          最近更新 更多