![](/img/trans.png)
[英]Swift: Error : “required' initializer 'init(coder:)' must be provided by subclass of 'NSURLRequest'”
[英]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.