簡體   English   中英

Swift:錯誤:“必需”初始值設定項“init(coder:)”必須由“UIView”的子類提供

[英]Swift : Error: 'required' initializer 'init(coder:)' must be provided by subclass of 'UIView'

我在 swift 2 中構建我的應用程序時遇到問題。Xcode 說:

'required' 初始化程序 '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]
  }
}

謝謝!

required 的注意事項:在類初始值設定項的定義之前編寫 required 修飾符,以指示該類的每個子類都必須實現該初始值設定項。

關於override 的注意事項:在覆蓋超類指定的初始化程序時始終編寫 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)
    }
    ...
}

根據最新的swift語法,init方法需要添加方法:

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

對這段代碼的一些評論:

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
}

注意:對於給定的 qr,nbReponse 和 nbQuestion 共享相同的值

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)]
}

非可選變量必須用一個值初始化...

將 QR 聲明為可選

var QR: Questionnaire?

或初始化它:

var QR: Questionnaire = Questionnaire()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM