如何正确初始化()一个快速视图控制器?

时间:2019-03-28 21:53:36

标签: swift initialization

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

如何正确初始化此类?

错误:“必填”初始化程序“ init(coder :)”必须由“ UIViewController”的子类提供

上下文:这是一个计算器应用程序,可以在按下任何按钮时使用。它将找到发件人标题,然后简单地将三个变量之一设为零,它将其存储在该可选变量中。

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!"
        }
    }


}

2 个答案:

答案 0 :(得分:0)

正在从情节提要中实例化您的控制器。在控制器调用std::vector期间,可以安全地配置初始视图,即:

viewDidLoad

答案 1 :(得分:0)

初始化取决于两个条件。

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

       self.answer = answer
       // Do other setup
   }
}