ios - 它显示 "required initializer init must be provided in subclass of UIControl"当我覆盖 init(frame : CGRect)

标签 ios swift initialization overriding initializer

此代码有效:

import UIKit

class wheel: UIControl {

}

但是这段代码没有:

class wheel: UIControl {
override init(frame: CGRect) {
    super.init(frame: frame)
}

当我覆盖 init(frame: CGRect) 而不是init(coder aDecoder: NSCoder).

为什么我必须执行init(coder aDecoder: NSCoder)?如果我没有实现 init(frame: CGRect) 为什么我不需要实现它?

我找到了一个类似的 Stack Overflow 帖子,但没有解释: Swift : Error: 'required' initializer 'init(coder:)' must be provided by subclass of 'UIView'

最佳答案

看。根据Apple documentations默认情况下,Swift 子类不继承它们的父类(super class)初始化器。它们仅在某些情况下被继承,其中之一是:如果您的子类没有定义任何指定的初始化器,它会自动继承其父类(super class)的所有指定初始化器。因此,如果您没有实现 init(frame: CGRect),所有 super 初始化器都会被继承。

同时 UIView 采用了 NSCoding 协议(protocol),它需要一个 init(coder:) 初始化器。因此,如果您正在实现 init(frame: CGRect),您的类将不再继承 super 初始化器。所以你也必须实现那个:

required init?(coder decoder: NSCoder) {
    super.init?(coder: decoder)
}

关于ios - 它显示 "required initializer init must be provided in subclass of UIControl"当我覆盖 init(frame : CGRect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502307/

相关文章:

ios - 检查数组是否包含Object :@(float) in Objective-C can unexpectedly return NO

iOS 删除钥匙串(keychain)值

ios - 如何调用presentViewController?

c++ - 在结构中使用结构数组时在标量初始值设定项周围加括号

ios - iOS 7 中的半透明导航栏

ios - 如何快速显示事件指示器?

ios - 获取和更改节点的半径大小 - Sprite-Kit

swift - 无法使用 Xib 将 UIView 类型的值转换为 [CustomView]

c++ - 试图在 C++ 中声明一个成员对象

javascript - 将二维数组从 PHP 转换为 JS