当前位置: 首页 > 面试题库 >

尝试在Xcode 6.3 Beta 3中覆盖初始化程序时生成错误

卫宏硕
2023-03-14
问题内容

以下代码显示了Xcode 6.3 Beta 3中的生成 错误。该代码可在Xcode 6.2和Xcode 6.3 Beta 2中使用。

class MyView: UIView {
  override init() {
    super.init()
    // Some init logic ...
  }

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

  required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
}

错误信息

初始化程序不会覆盖其父类中的指定初始化程序

解决方法?

有一种可能的解决方法,可以使用Beta
3发行说明中
提到的init方法创建协议。我不能让它工作都都initinit(frame: CGRect)初始化。

我该如何解决这些构建错误?


问题答案:

子类的指定初始值设定项需要调用超类的指定初始值设定项。便捷初始化程序只能调用该类的另一个便捷初始化程序或指定的初始化程序。

init()是UIView的便捷初始化程序,如果您将UIView子类化,则应调用其指定的初始化程序init(frame:frame)

override init() {
super.init(frame: frame)
// Some init logic ...
}

编辑:显然在Beta
3中,UIView没有名为init的便捷初始化程序,因此您也需要删除override关键字,现在这是一个指定的初始化程序,因此您需要调用超类的指定的初始化程序

init() {
super.init(frame: frame)
// Some init logic ...
}

编辑:虽然这可行,但是我认为写这个更好的方法是:

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

资料来源:Swift文档

规则1指定的初始化程序必须从其直接超类调用指定的初始化程序。

规则2便捷初始化程序必须从同一类调用另一个初始化程序。

规则3便利初始化程序必须最终调用指定的初始化程序。



 类似资料:
  • 问题内容: 因此,我刚刚升级到Xcode 6.3 Beta 3,出现了许多与以下内容有关的错误: 初始化程序不会覆盖其父类中的指定初始化程序。 例如,这是一个类: 这是我的课程之一: 问题答案: 我的解决方案是一种快速解决方案,但我认为它比Apple在发行说明中的​​用途要容易。有关更多信息,请在此处搜索19775924 http://adcdownload.apple.com//Develope

  • 问题内容: 在我的Django(1.2)项目中,我想以模型形式预填充字段,但是新值将被忽略。这是代码段: 我也尝试了使用,但没有效果:总是在表单中显示数据库值。有任何想法吗? 问题答案: 尝试这个:

  • 我已经配置了我的 REST/Spring/Jersey 项目,以使用 enunciate 为 API 生成文档。 我的pom中的相关变化。xml是 我的发音。xml如下 当我运行我的maven项目时,我收到以下初始化发音错误。正如您所看到的,错误不是很有帮助。任何提示我的配置中可能有什么错误。 --- maven-enunciate-spring-plugin:1.28:assemble (def

  • 因此,我的目标是将数据传输到Stripe为其API提供的。因此,正常情况下,我转到storyboards并将一个新的vc与类连接起来,这样我就可以从另一个vc转到它并进行数据传输。 在此之前,我只是在推动vc,它工作正常,并且知道我可以实例化它并进行数据传输,但即使当我尝试这样做时,我也会得到一个致命的错误: 这是我在中的代码: 我更改了是因为我读了这篇关于init错误的文章,但现在它在运行之前就

  • 所以我最近在我的win10 PC上安装了eclipse,并创建了一个公共类。代码如下: 接下来,显示了一个错误: 然后,我删除了info.java文件,并显示以下错误: 我能做些什么来解决这个问题?

  • 当我尝试初始化Firebase Cloud Firestore时,我遇到了以下错误: 未捕获的类型错误:webpack_imported_module_0_firebase.firestore不是函数 我以前用安装了firebase。