Ошибка тройного синтаксиса Swift

Раньше я все время программировал на Objective-C, и я новичок в Swift. Эта ошибка Xcode меня действительно смущает.

func renderBufferAreaBAUp(yOffset: CGFloat, amount: CGFloat, ifLeft: Bool)
{     
        var topViewIndexForIndexAdjust = ifLeft?leftTopIndex:rightTopIndex
}

В этой строке я намеревался использовать тернарный. И leftTopIndex, и rightTopIndex имеют тип Int. Однако Xcode дает мне те, которые находятся в этой конкретной строке,

Последовательные операторы в строке должны быть разделены символом ';' Ожидаемое выражение

Кто-нибудь может сказать мне, что они означают? Спасибо.


person Bigman    schedule 07.03.2015    source источник


Ответы (3)


Сообщения об ошибках Swift часто загадочны и бесполезны. Ваша реальная проблема в том, что Swift нужно некоторое пространство вокруг ? и :.

var topViewIndexForIndexAdjust = ifLeft ? leftTopIndex : rightTopIndex
person vacawama    schedule 07.03.2015

Вы должны использовать пробелы для разделения операндов и операторов:

var topViewIndexForIndexAdjust = ifLeft ? leftTopIndex : rightTopIndex
                                       ^ ^            ^ ^

Swift очень строг к этому - даже эта, по-видимому, правильная строка кода:

let val =12

выдает ошибку компиляции.

person Antonio    schedule 07.03.2015

Боролся с загадочными сообщениями об ошибках Swift для тернарных операторов.

Ошибка 1

incrementValue = incrementValue == 0?1:incrementValue //errors saying add ";", consecutive statements must be separated by ";"

Ошибка 2

incrementValue = incrementValue = 0 ? 1 : incrementValue //error - Assigning a variable to itself

Правильный - С ПРОБЕЛАМИ и С ==

incrementValue = incrementValue == 0 ? 1 : incrementValue //worked
person Naishta    schedule 21.07.2017