2016-01-01 60 views
9

Pytanie jest bardzo proste, ale po prostu nie mogłem znaleźć odpowiedzi!Dlaczego operator trójdzielny w swift jest tak wybredny?

Dlaczego nie

return x == 0? "" : "Hello" 

kompilacji ale

return x == 0 ? "" : "Hello" 

robi?

To naprawdę dziwne, ponieważ wszyscy pozostali operatorzy nie potrzebują dodatkowej białej przestrzeni. na przykład

let x = 1+1 
let y = 1 + 1 

są takie same.

Myślę, że ma to coś wspólnego z opcjami. Jednak podczas korzystania z operatorem ? na zmiennej, należy stosować tak:

let s: String? = nil 
let x = s?.startIndex 

rozumiem musi śledzić innego operatora, prawda?

Odpowiedz

5

Myślę, że ma to coś wspólnego z opcjami.

To robi. Dokumentacja na operators mówi:

Jest jedno zastrzeżenie do zasad [dotyczące białych znaków wokół operatorów]. Jeśli predefiniowany operator ! lub ? nie ma białych znaków, traktowany jest jako operator przyrostkowy, niezależnie od tego, czy ma białe spacje po prawej. Aby użyć operatora ? jako operatora łączenia opcjonalnego, nie może on mieć białych znaków po lewej stronie. Aby użyć go w potrójnym warunkowym (?:), musi zawierać białe znaki wokół obu stron.

0

Tak, jestem całkiem pewny (tak jak przypuszczałeś) problem dotyczy opcji.

Wolę napisać moje trójskładnikowych operatorów tak ...

let num = (isTrue) ? (1) : (0) 

Oczywiście, można wybrać, co jest w nawiasach, czy to po prostu dosłowne (jak pokazano), czy nie.