Co to jest condition
? Czy jest to BOOL
lub NSNumber
?
Jeśli condition
jest BOOL
, to nie chcesz używać @NO
lub @YES
w ogóle.Chcesz powiedzieć
if (condition) // test if condition is true
if (!condition) // test if condition is false
if (condition == NO) // same as previous, based on personal preference
pamiętać, że nigdy nie powinien powiedzieć
if (condition == YES)
BOOL
ponieważ w rzeczywistości nie jest ograniczony do 0
i 1
jako wartości, można go trzymać niczego w char
, więc jeśli przypadkowo posiada condition
powiedzmy: 3
, a następnie if (condition)
i if (condition == YES)
zachowują się inaczej.
Jeśli condition
jest NSNumber
, to nadal nie chcą używać @NO
i @YES
. Po prostu chcesz przekonwertować go na BOOL
wykorzystaniem -boolValue
, jak w
if ([condition boolValue]) // test if condition is true
if (![condition boolValue]) // test if condition is false
if ([condition boolValue] == NO) // same as previous, based on personal preference
Podstawowym wynos Oto, nie używaj @NO
i @YES
literały dla porównań. Jest bezcelowe i nieeleganckie, ponieważ wszystko, co możesz z nimi zrobić, zamienia je z powrotem na BOOL
.
Zwróć uwagę, że! Warunek i warunek == NO to ** nie ** to samo. Jest jeden przypadek na krawędzi. Powiedzmy, że warunek to 256. To spowoduje przepełnienie do 0 i będzie równe "NIE", ponieważ jest po prostu znakiem char. Jednak operator '!' Zwraca wartość logiczną C, która jest jawnie zdefiniowana przez standard C, aby była prawdziwa dla wszystkich wartości innych niż zero. Więc 'BOOL' będzie" NIE ", a' bool' będzie "prawdziwe" – borrrden
Nieważne, powyższy przykład wydaje się działać sam. Sprawa, która mnie ugryzła, jest nieco inna. W niektórych przypadkach BOOL (a mianowicie 8-bitowe przepełnienie) (flaga) i (flaga == NIE) będą fałszywe. – borrrden
Możesz również użyć notacji Objective-C 2.0 dla akcesorów dla boolValue – HAS