Объявить переменную без типа

Я делаю игру, и у меня есть разные режимы игры. Эти режимы игры в отдельных классах. Когда пользователь выбирает режим игры, в коде используется соответствующий класс. Однако для манипулирования любым игровым режимом я использовал сцену. Есть ли способ использовать одну переменную или мне нужно использовать несколько?

Вот ViewController, который имеет дело с режимами игры:

class GameViewController: UIViewController {

let classic = GameScene(fileNamed: "GameScene")
let timed = Timed(fileNamed: "Timed")
let endless = Endless(fileNamed: "Endless")
var scene: SKScene?

init() {
    if (gameMode == "Classic"){
        var scene = classic
        print("Classic")
    }
    else if (gameMode == "Timed"){
        var scene = timed
        print("Timed")

    }
    else if (gameMode == "Endless"){
        var scene = endless
        print("Endless")

    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let yourVC = segue.destination as? Postgame {
        yourVC.score = scene!.score
    }
}

2 ответа

Теоретически, вы можете пойти с:

var score: Any!

Any означает что угодно, любой тип.

Помимо этого, кажется, что вы ищете (и в основном говорите о) шаблон проектирования стратегии. Кажется, это правильный способ решить вашу задачу. Вкратце: определите протокол, реализуйте его всеми вашими стратегиями, используйте ту, которая вам нужна, вызывайте методы по унифицированным протоколом именам.

Прочитайте: Шаблон дизайна стратегии в Swift

Переменная Swift должна иметь тип. Иначе как бы компилятор узнал, что с ним можно сделать?

В этом случае, по-видимому, имеет score свойство, поэтому вы должны составить протокол с этим:

protocol GameMode {
    var score: Int { get }
    // and whatever else is common to these classes
}
Другие вопросы по тегам