Класс 'ViewController' не имеет инициализаторов |стриж - PullRequest
0 голосов
/ 01 октября 2019

Я создаю калькулятор и продолжаю получать сообщение "Класс 'ViewController' не имеет инициализаторов"

Не уверен, почему я продолжаю получать это сообщение. Есть идеи?

'import UIKit

class ViewController: UIViewController
{
    var numberOnScreen: Double = 0;
    var previousNumber: Double = 0;
    var performingMath: false
    var operation = 0;'

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

все свойства должны быть инициализированы в Swift, если вы не используете символ развертки '?'или же '!'и ваше свойство должно быть типом, например:

class ViewController: UIViewController {
    var numberOnScreen: 0
}

это неверный способ установки типа, ноль - это int, но когда вы используете ':', компилятор ожидает тип, а не значение, чтобы исправить это, вам нужно сначала установить его тип:

class ViewController: UIViewController {
    var numberOnScreen: Int = 0
}

таким образом выше инициализировал ViewController с numbeROnScreen всегда с нуля, но если вам нужно передать значение в конструктор выдолжен сделать:

class ViewController: UIViewController {
    var numberOnScreen: Int

    init(newValue: Int) {
        self.numberOnScreen = newValue
        super.init(nibName: "ViewController", bundle: nil)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Или, если вы хотите передать значение numberOnScreen после инициализации ViewController, вы должны добавить значок '?'чтобы сказать ViewController, что свойство будет инициализировано после инициализации:

class ViewController: UIViewController {
    var numberOnScreen: Int?
}

Но вам нужно быть осторожным, чтобы использовать это свойство выше, оно может быть нулевым, и для его использования вам нужно использовать распаковщик '! ', но правильный способ получить доступ к этому значению - использовать let или guard

class Calculator {

    init() {
        let controller = ViewController()
        controller.numberOnScreen = 1
        guard let numberOfScreen = controller.numberOnScreen else {
            return
        }
        print(numberOfScreen)
    }

}

Итак, если вы хотите увидеть больше:

Необязательные значения

https://developer.apple.com/documentation/swift/optional

Заявления (о том, если позволено, охранник и многое другое)

https://docs.swift.org/swift-book/ReferenceManual/Statements.html

0 голосов
/ 01 октября 2019

У вас есть простая опечатка:

var performingMath = false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...