Swift:错误:’required’初始化程序’init(编码器:)’必须由’UIView’的子类提供

当我在swift 2中构建我的应用程序时遇到问题.Xcode说:

‘required’initulator’init(coder :)’必须由’UIView’的子类提供

这是该类的代码:

class creerQuestionnaire: UIView { @IBOutlet weak var nomQuestionnaire: UITextField! @IBOutlet weak var question: UITextField! @IBOutlet weak var reponse: UITextField! var QR: Questionnaire @IBAction func creerQuestion(sender: AnyObject) { QR.ajouterQuestion(question.text!, nouvReponse: reponse.text!) } } 

这是class级调查问卷:

 import Foundation class Questionnaire { var QR = [String(), String()] func getQuestion(nbQuestion: Int) ->String { return QR[nbQuestion] } func getReponse(nbReponse: Int) ->String { return QR[nbReponse] } func ajouterQuestion(nouvQuestion: String, nouvReponse: String) { QR += [nouvQuestion, nouvReponse] } } 

留言Merci!

需要注意:在类初始化程序的定义之前编写必需的修饰符,以指示该类的每个子类都必须实现该初始化程序。

覆盖注意事项:当覆盖超类指定的初始化程序时,总是编写覆盖修饰符,即使您的子类的初始化程序的实现是一个便利初始化程序。

以上两个注释均参考: Swift编程语言/初始化

因此,您的UIView的子类应该类似于下面的示例:

 class MyView: UIView { ... override init(frame: CGRect) { super.init(frame: frame) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } ... } 

对此代码的一些评论:

 var QR = [String(), String()] 

var名称应以小写开头:var qr

你想用2个空字符串初始化吗? 在您的代码中,您在init处获得[“”,“”]。 这个数组使用起来不是很方便,因为你按顺序混合问答。

创建一对数组可能会更好:

 var qr : [(q: String, r: String) = [] // initiated as empty 

您可以通过以下方式访问其组件:qr [i] .q和qr [i] .r

你需要测试nbQuestion是否在界限内; 与之前的qr定义一样,那就是

 func getQuestion(nbQuestion: Int) ->String { if nbQuestion < 0 || nbQuestion >= qr.count { return "" } return qr[nbQuestion].q } 

注意:nbReponse和nbQuestion为给定的qr共享相同的值

 func getReponse(nbReponse: Int) ->String { if nbReponse < 0 || nbReponse >= qr.count { return "" } return qr[nbReponse].r } func ajouterQuestion(nouvQuestion: String, nouvReponse: String) { qr += [(nouvQuestion, nouvReponse)] } 

根据最新的swift语法,init方法需要添加方法:

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

必须使用值初始化非可选变量…

将QR声明为可选

 var QR: Questionnaire? 

或者初始化它:

 var QR: Questionnaire = Questionnaire()