2016-12-28 2 views
1

Перед тем как использовать --theX > 0, и он отлично работал.Как заменить устаревший оператор сокращения числа «-» при сравнении?

Отрывок из старого кода:

if --theX < 0 { 
    ... 
if ++theX < 0 { 
    ... 
if ++theX > worldSize.width + 1 { 
    ... 
if --theX > worldSize.height { 
    ... 

Ниже вы можете увидеть четыре строки кода, которые имеют theX - 1 > 0 или что-то подобное. Теперь, когда я обновился до Swift 3, я подумал, что легко изменить --theX либо theX - 1, либо theX -= 1.

Попытка обновленного кода:

func move(_ point:Point, worldSize:WorldSize) -> (Point) { 
    var theX = point.x 
    var theY = point.y 
    switch self { 
    case .left: 
     if theX - 1 < 0 { 
      // theX = worldSize.width - 1 
      print("g.o.") 
      stopped = true 
     } 
    case .up: 
     if theY + 1 < 0 { 
      // theY = worldSize.height - 1 
      print("g.o.") 
      stopped = true 
     } 
    case .right: 
     if theX + 1 > worldSize.width + 1 { 
      // theX = 0 
      print("g.o.") 
      stopped = true 
     } 
    case .down: 
     if theY - 1 > worldSize.height { 
      // theY = 0 
      print("g.o.") 
      stopped = true 
     } 
    } 
    return Point(x: theX, y: theY) 
    } 
} 

Однако, кажется, что не работает («Невозможно преобразовать значение типа„Bool“ожидаемого типа аргумента„Int“» ---> При использовании - = или + =). Если вы, ребята, задаетесь вопросом, это аркадная игра Снейка, а функция выше - это то, что происходит, когда змея движется (влево, вправо, вверх, вниз)

Любая помощь в том, почему эта проблема происходит или возможно, другая, но схожая версия приращений и декрементов (- и ++)?

+1

, пожалуйста, обновите свой вопрос с помощью более полезного названия, что-то особенное для проблемы, которую вы имеете. –

+0

какие строки вы получаете эту ошибку? – MikeG

ответ

2

В заявлении --theX используется оператор pre-декремент. Это уменьшает значение theX перед использованием, так:

Это:

if --theX > 0 { 
} 

эквивалентно:

theX -= 1 
if theX > 0 { 
} 

То же самое верно и для других. Если вы использовали предварительный декремент (--value) или предварительный приращение (++value), замените его на value -= 1 или value += 1 перед использованием value на следующей строке.


Проблема с переводом if --theX > 0 в if theX - 1 > 0 является то, что значение theX не модифицируется, так что вы будете использовать неправильное значение для theX когда вы строите Point в return Point(x: theX, y: theY) заявлении.

+0

Спасибо! Твоя работала отлично –

Смежные вопросы