Унарный оператор ++ нельзя применять к операнду типа Int

Почему следующий быстрый код приводит к ошибке «Унарный оператор '++' не может быть применен к операнду типа 'Int'" ??? (используя swift-1.2 на Xcode-6.3.2)

struct Set {

    var player1Games: Int
    var player2Games: Int

    init() {
        self.player1Games = 0
        self.player2Games = 0
    }

    func increasePlayer1GameScore () {
        player1Games++   // error: Unary operator '++' cannot be applied to an operand of type 'Int'
    }

    func increasePlayer2GameScore () {
        player2Games++   // error: Unary operator '++' cannot be applied to an operand of type 'Int'
    }

}

person iKK    schedule 27.05.2015    source источник
comment
Set — это встроенный тип в Swift. попробуйте переименовать свою структуру. он должен работать   -  person Vivek Molkar    schedule 27.05.2015


Ответы (3)


Сообщение об ошибке немного вводит в заблуждение. Что вам нужно сделать, так это добавить mutating перед func, чтобы указать, что он будет изменить структуру:

struct MySet {

    var player1Games: Int
    var player2Games: Int

    init() {
        self.player1Games = 0
        self.player2Games = 0
    }

    mutating func increasePlayer1GameScore() {
        player1Games++
    }

    mutating func increasePlayer2GameScore() {
        player2Games++
    }

}

Примечание. Set — это тип в Swift, я бы посоветовал использовать другое имя для вашей структуры.

person Eric Aya    schedule 27.05.2015

Используйте ключевое слово mutating перед объявлением функции, чтобы указать, что вы изменяете переменные класса.

ИЛИ

Измените свою структуру на class.

Это должно решить ваши проблемы :).

person Chackle    schedule 27.05.2015

В Swift 3 и более поздних версиях причина этой ошибки заключается в том, что операторы ++ и -- были удалены из языка. Вместо этого рекомендуется использовать x += 1.

Подробнее о том, почему это произошло, см. этот очень хороший ответ.

person Craig Brown    schedule 23.06.2018
comment
Почему за это проголосовали? Любой, кто найдет эту страницу через поиск этого сообщения об ошибке, вероятно, обнаружит, что это и есть причина ошибки (это было для меня). - person Craig Brown; 17.07.2018
comment
Это была моя проблема, не знаю, почему вас минусовали. - person Matt; 04.01.2019