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

时间:2016-02-07 15:40:49

标签: ios iphone swift

我在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!

4 个答案:

答案 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()