Подтвердить что ты не робот

Множественное присвоение переменной в Swift

Как назначить несколько переменных в одной строке с помощью Swift?

    var blah = 0
    var blah2 = 2

    blah = blah2 = 3  // Doesn't work???
4b9b3361

Ответ 1

Нет. Это языковая функция для предотвращения стандартного нежелательного побочного эффекта присваивания, возвращающего значение, как описанного в книге Swift:

В отличие от оператора присваивания в C и Objective-C оператор присваивания в Swift сам не возвращает значение. Следующий оператор недействителен:

   if x = y {
       // this is not valid, because x = y does not return a value
   }

Эта функция предотвращает случайное использование оператора присваивания (=), когда на самом деле предполагается равное оператору (==). Если make x = y недействителен, Swift помогает избежать таких ошибок в вашем коде.

Таким образом, это помогает предотвратить эту чрезвычайно распространенную ошибку. Хотя эту ошибку можно смягчить на других языках, например, используя условия Йода, дизайнеры Swift, по-видимому, решили, что лучше понять язык чтобы вы не могли стрелять себе в ногу. Но это означает, что вы не можете использовать:

blah = blah2 = 3

Если вы отчаянно нуждаетесь в выполнении задания в одной строке, вы можете использовать синтаксис кортежа, но вам все равно придется назначать каждое значение:

(blah, blah2) = (3, 3)

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

blah = 3
blah2 = 3

Ответ 2

В принятом ответе говорится: вы можете получить более сильный синтаксис, однако вы не можете назначать от a до b до c без использования нескольких строк (для безопасности, возможно). Здесь приведен пример более сжатого синтаксиса для объявления и назначения нескольких переменных в одной строке:

var red, green, blue, alpha : CGFloat
(red, green, blue, alpha) = (0.0, 0.0, 0.0, 0.0)
ledColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha)