我在swift 2中构建应用程序时遇到问题.Xcode说:
'required'initializer'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!)
}
}
这是课程调查问卷:
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!
答案 0 :(得分:18)
注意必需:在定义类初始值设定项之前写入必需的修饰符,以指示该类的每个子类都必须实现该初始值设定项。
覆盖的注意事项:当覆盖超类指定的初始化程序时,总是编写覆盖修饰符,即使您的子类的初始化程序的实现是一个便利初始化程序。
以上两个注释均来自:Swift Programming Language/Initialization
因此,您的UIView子类应与下面的示例类似:
class MyView: UIView {
...
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
...
}
答案 1 :(得分:1)
对此代码的一些评论:
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)]
}
答案 2 :(得分:0)
According to the latest swift syntax, the init method needs to add methods:
required init?(coder aDecoder: NSCoder)
{
fatalError("init(coder:) has not been implemented")
}
答案 3 :(得分:-1)
必须使用值...
初始化非可选变量将QR声明为可选
var QR: Questionnaire?
或初始化它:
var QR: Questionnaire = Questionnaire()