Как правильно инициировать () Swift View контроллер? - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь инициализировать этот класс ViewController.Я не использую стратегию проектирования MVC, так что игнорируйте используемые плохие соглашения (если таковые имеются).

Как правильно инициализировать этот класс?

Ошибка: 'обязательный' инициализатор 'init (coder :)' должен быть предоставлен подклассом 'UIViewController'

Context:Это приложение калькулятор, когда при нажатии любой из кнопок.Он найдет заголовок отправителя и просто введет, если один из трех переменных равен 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!"
        }
    }


}

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Инициализация зависит от нескольких условий.

  1. Если вы используете раскадровку, вы можете просто удалить init и ваш VC будет иметь инициализатор по умолчанию.Убедитесь, что либо у всех ваших свойств есть значение по умолчанию, либо они являются необязательными.
  2. Если вы используете xib или просто создаете представление программным способом, вы можете иметь пользовательский удобный инициализатор, где вы таким образом передаете некоторые дополнительные данные.
class MyViewController: ViewController {
   var answer: Int
   convenience init(answer: Int) {
       self.init()

       self.answer = answer
       // Do other setup
   }
}
0 голосов
/ 29 марта 2019

Ваш контроллер создается из раскадровки.Безопасное место для настройки начальных представлений во время вызова контроллера на viewDidLoad, то есть:

override func viewDidLoad() {
    super.viewDidLoad()
    // configure your views and subviews here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...