如何正确初始化 Swift 视图控制器



我正在尝试初始化这个ViewController类。我没有使用 MVC 设计策略,因此请忽略所使用的不良约定(如果有的话(。

如何正确初始化此类?

错误:"必需"初始值设定项"init(编码器:("必须由"UIViewController"的子类提供

上下文:这是一个计算器应用程序,当按下任何按钮时。它将找到发件人的标题,如果三个变量中的一个为 nil,它就会将其存储在该可选中。

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    @IBOutlet weak var answerLabel: UILabel!
    //global vars for all funcs
    var selection1: Int? {
        didSet { answerLabel.text = String(selection1!) }
    }
    var selection2: String? {
        didSet { answerLabel.text = selection2! }
    }
    var selection3: Int? {
        didSet { answerLabel.text = String(selection3!) }
    }
    var answer: Int {
        didSet { answerLabel.text = String(answer) }
    }

    init() {

    }

    @IBAction func touchButton(_ sender: UIButton) {
        if selection1 == nil {
            selection1 = Int(sender.currentTitle!)
            print("Selection set in first pos.")
        } else if selection2 == nil {
            selection2 = sender.currentTitle
        } else if selection3 == nil {
            selection3 = Int(sender.currentTitle!)
        } else {
            calculate(firstNum: selection1!, operation: selection2!, secondNum: selection3!)
        }
    }
    func calculate(firstNum: Int, operation: String, secondNum: Int) {
        switch operation {
        case "+":
            answer = firstNum + secondNum
        case "-":
            answer = firstNum - secondNum
        case "x":
            answer = firstNum * secondNum
        case "/":
            answer = firstNum / secondNum
        default:
            answerLabel.text = "Something went wrong!"
        }
    }

}

初始化取决于几个条件。

  1. 如果使用的是情节提要,只需删除init,VC 将具有默认初始值设定项。确保所有属性都具有默认值,或者它们是可选的。
  2. 如果您使用xib或只是以编程方式创建视图,则可以使用自定义便利的初始值设定项,以这种方式传递一些额外的数据。
class MyViewController: ViewController {
   var answer: Int
   convenience init(answer: Int) {
       self.init()
       self.answer = answer
       // Do other setup
   }
}

控制器正在从情节提要实例化。配置初始视图的安全位置是在控制器调用 viewDidLoad 期间,即:

override func viewDidLoad() {
    super.viewDidLoad()
    // configure your views and subviews here
}

最新更新