【问题标题】:Xcode 13 convenience init compiler issueXcode 13 便利初始化编译器问题
【发布时间】:2022-01-07 06:45:36
【问题描述】:

在我更新到 Xcode 13 之前,下面的代码在 Xcode 12 中创建的另一个自定义 UIView 中运行良好。 我创建了这个新的自定义视图,编译器参考了方便的 init 给出了以下矛盾的错误

  1. 覆盖声明需要一个“覆盖”关键字
  2. 'init(frame:)' 已被覆盖

为什么 Xcode 13 在新的自定义类中报告此错误,而不是在 Xcode 12 中创建的相同错误?

class OptionsPanel: UIView {
    
    override init(frame : CGRect) {
        super.init(frame : frame)
    }
    
    convenience init(frame: CGRect) {
        self.init(frame: frame)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

【问题讨论】:

  • 您是否意识到您已经声明了两个具有完全相同参数列表的初始化程序?我不相信这可以在 Xcode 12 中编译。
  • 我和 Sweeper 在一起。这不应该在任何版本的 Xcode 中编译。我想知道为什么它在 Xcode 12 中有效,而不是为什么它在 Xcode 12 中无效。摆脱convenience init(frame:)。这是一个必需的初始化器,而不是便利的初始化器。
  • 是的,同意也不应该用 xcode 12 编译。

标签: swift xcode ios15


【解决方案1】:

这就是问题所在。在另一个自定义视图中,我在便利 init 便利 init(frame: CGRect, packages: [Purchases.Package], testing: Bool) 中有其他参数。 我确实尝试了这个参数中的其他参数,认为这可能是问题所在,但是在我创建了一个新项目并且 iPhone 13 模拟器没有出现之前,Pod Xcode 索引一直存在各种问题......所以它迷失了所有这些灭火! 谢谢 Sweeper、Duncan C 和 Bhawin Ranpura。

社区要求我进行编辑。 问题与给出的答案完全相同 - 便利 init 不能与 init 相同。即

override init(frame : CGRect) {
    super.init(frame : frame)
}

convenience init(frame: CGRect) {
    self.init(frame: frame)
}

被编译器拒绝。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
相关资源
最近更新 更多