Swift:错误:’required’初始化程序’init(编码器:)’必须由’UIView’的子类提供
当我在swift 2中构建我的应用程序时遇到问题.Xcode说:
‘required’initulator’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!) } }
这是class级调查问卷:
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!
需要注意:在类初始化程序的定义之前编写必需的修饰符,以指示该类的每个子类都必须实现该初始化程序。
覆盖注意事项:当覆盖超类指定的初始化程序时,总是编写覆盖修饰符,即使您的子类的初始化程序的实现是一个便利初始化程序。
以上两个注释均参考: Swift编程语言/初始化
因此,您的UIView的子类应该类似于下面的示例:
class MyView: UIView { ... override init(frame: CGRect) { super.init(frame: frame) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } ... }
对此代码的一些评论:
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)] }
根据最新的swift语法,init方法需要添加方法:
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
必须使用值初始化非可选变量…
将QR声明为可选
var QR: Questionnaire?
或者初始化它:
var QR: Questionnaire = Questionnaire()
- 我想禁用EKEventEditViewController的URL和NOTES字段
- XCode错误itms-90035 – GCManager.o的签名无效
- 有没有办法强制parse.com单设备login?
- Charles Proxy-主管代理工具
- iOS:在钥匙串中预先安装SSL证书 – 以编程方式
- Facebook登录 – 停留在白色网页SWIFT
- 当通过xcode获取info.plist错误时,上传app store的二进制文件
- NSFileManager:enumeratorAtURL:向NSFileManager返回一个不同forms的URL:URLForDirectory
- iOS Swift,返回到视图控制器的同一个实例