Как понять этот синтаксис (a? B? c: d: c) в Swift - PullRequest
0 голосов
/ 02 марта 2020

Я получаю код ниже в учебнике по SwiftUI, как понять эту строку? Я знаю, что цель состоит в том, чтобы установить цвет сиденья как акцентный (синий), если он выбран, в противном случае оставьте его по умолчанию серым цветом.

Но как понять этот синтаксис и как он называется в терминологии Swift?

.foregroundColor(isSelectable ? isSelected ? accentColor : Color.gray.opacity(0.5) : accentColor)

struct ChairView: View {

    var width: CGFloat = 50
    var accentColor: Color = .blue
    var seat = Seat.default
    @State var isSelected = false
    var isSelectable = true
    var onSelect: ((Seat)->()) = {_ in }
    var onDeselect: ((Seat)->()) = {_ in }


    var body: some View {
       VStack(spacing: 2) {
           Rectangle()
               .frame(width: self.width, height: self.width * 2/3)
               .foregroundColor(isSelectable ? isSelected ? accentColor : Color.gray.opacity(0.5) : accentColor)
            .cornerRadius(width / 5)

           Rectangle()
               .frame(width: width - 10, height: width / 5)
               .foregroundColor(isSelectable ? isSelected ? accentColor :  Color.gray.opacity(0.5) : accentColor)
               .cornerRadius(width / 5)
       }
    }
}

struct ChairView_Previews: PreviewProvider {
    static var previews: some View {
        ChairView()
    }
}

1 Ответ

2 голосов
/ 02 марта 2020

Is является вложенным троичным оператором .

Не слишком знаком с swift, поэтому я не знаю, что мой фрагмент кода будет полностью соответствовать Swift, но давайте назовем его psudeocode за то, что делает ваш пример:

if a {
    if b {
        c
    } else {
        d
    }
} else {
    c
}
...