2016-02-07 42 views
8

我有一个问题,当我建立我的应用在迅速2. Xcode中说:斯威夫特:错误:初始化(编码器:)'“需要”初始化必须的子类来提供“的UIView”

​​3210

这是类的代码:

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!

回答

8

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

注意事项覆盖:你总是重写超类指定初始化时写override修饰符,即使你的子类的实现初始化的是一个方便的初始化。 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) 
    } 
    ... 
} 
+0

为什么是一个'override'和其他'必需'? –

+0

@MichaelDautermann我刚刚添加了一些关于required和override的信息。感谢您的关注。 – Allen

+0

感谢您的回复! –

-1

非可选变量都必须用一个值被初始化...

要么声明QR作为可选

var QR: Questionnaire? 

或初始化它:

var QR: Questionnaire = Questionnaire() 
1

一些评论这个代码:

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

一个变量名称应该以小写开头的:var QR

你想用2个空字符串初始化?在你的代码中,你会在初始化时获得[“”,“”]。 这个数组使用起来不太方便,因为你按顺序混合了问题和答案。

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

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)] 
} 
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") 
} 
相关问题