2017-01-02 2 views
0

У меня есть охранник заявление, как показано ниже, что мне нужно для переменной, чтобы изменить, если результат не соответствует действительностиИзменить переменные в инструкции охраны в Swift?

func setGif() { 
    var animalName = (String(format: "%03d", self.animal.speciesId!)) 
    guard animal.isDefault! == true else { 
     animalName = animalName + "-merg" 
     return 
    } 
    let gif = UIImage(gifName: animalName) 
    self.gifIBO.setGifImage(gif, manager: gifManager) 
    gifIBO.contentMode = UIViewContentMode.center 
} 

делая это таким образом отображает GIF для истинного значения, но не для ложного. Мне нужно, чтобы он искал имя gif с новым значением, если защита выходит ложно. Что я здесь делаю неправильно?

ответ

3

Это неуместное использование guard. guard выходит из текущей области действия, и вы не хотите этого делать; вы хотите продолжать. Так что просто используйте старые добрые if. (Кроме того, не сравнить Bool к true как условие, логическое значение является состояние.)

if animal.isDefault! { 
    // it's true, do one thing 
} else { 
    // it's false, do a different thing 
} 

В вашем случае, вы, вероятно, просто не нужен if:

var animalName = (String(format: "%03d", self.animal.speciesId!)) 
if !(animal.isDefault!) { 
    animalName += "-merg" 
} 
let gif = UIImage(gifName: animalName) 
+0

Я вижу. Я хотел использовать охрану, потому что, когда приложение растет, оно в конечном итоге превратится в оператор if else, и я читал, что охранник лучше избегать, если иначе @matt – user4938361

+0

Ну, это не так. И вам также кажется, что «охранник» совпадает с «если нет», что также является ложным. – matt

+0

Я вижу. Спасибо! – user4938361

0

Нет необходимости в использование охранник здесь. Также используйте animal.isDefault == .some(true), чтобы уменьшить вероятность аварии, если isDefault равен нулю:

func setGif() { 

    var animalName = (String(format: "%03d", self.animal.speciesId!)) 
    if animal.isDefault == .some(true) else { 
     animalName = animalName + "-merg" 
    } 

    let gif = UIImage(gifName: animalName) 
    self.gifIBO.setGifImage(gif, manager: gifManager) 
    gifIBO.contentMode = .center 

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