Więc w Objective-C przy użyciu logicznych jest to możliwe, i zachęcać do pisania kodu przy użyciu zmiennej wartość niezerową, jak jest to wartość logiczna, co oznacza, że można napisać kod jak poniżej:Swift Boolean sprawdzanie
if (someBool) {
// Stuff
}
Ponadto, istnieją powody, dla których kod jak poniżej jest odradzane:
if (someBool == YES) {
// Might run into problems here
}
powody sprawdzanie logiczną przeciwko innemu boolean są lepiej wyjaśnione here, ale krótko sprawa jest tak, że kiedy jesteś porównując równości do YES
lub NO
bezpośrednio, w rzeczywistości porównujesz odpowiednio z 1
i 0
. Ponieważ Objective-C pozwala na użycie wartości niezerowych jako wartości prawdziwej, możesz skończyć porównywanie czegoś, co powinno być uznane za prawdziwe względem YES
i mieć wyrażenie, które zostanie rozwiązane na NO
, np.
int trueNumber = 2;
if (trueNumber == YES) {
// Doesn't run because trueNumber != 1
}
Czy to nadal problem w Swift? Odłóż problemy z kodem, jeśli widzę coś podobnego do następującego: czy to będzie problem, czy też to naprawdę nie ma znaczenia? Czy te porównania w stylu C nadal występują pod maską, czy jest coś wbudowanego w Swift BooleanType, który zapobiega tym problemom?
Dobra, więc powodem, dla którego kod, który stanowił problem w Objective-C, nie jest problem ze względu na ścisłe sprawdzanie typu w Swift? Wygląda na to, że aby używać go w logicznych kontrolach w Swift, typ w zasadzie musi zwracać ściśle wpisany 'Bool' (jak pokazano powyżej), co pozwala uniknąć problemu, który C i Objective-C miał z' typedef signed char''. Czy to jest tak proste? – Ziewvater
@ Ziewvater Yup, popraw – Kametrixom