Objective-C의 원시인이 NIL인지 여부를 어떻게 테스트합니까?
-
23-08-2019 - |
문제
iPhone 응용 프로그램에서 확인을하고 있습니다.
int var;
if (var != nil)
작동하지만 X 코드에서는 "포인터와 정수의 비교"를 생성하고 있습니다. 어떻게 수정합니까?
나는 Java 세계에서 왔는데, 위의 진술이 상승에 실패 할 것이라고 확신합니다.
해결책
프리미티브는 될 수 없습니다 nil
. nil
객관적인 C 객체에 대한 포인터를 위해 예약되어 있습니다. nil
기술적으로 포인터 유형이며, 캐스트없이 포인터와 정수를 믹싱하면 거의 항상 컴파일러 경고를 초래할 수 있습니다. 한 가지 예외가 있습니다. 캐스트없이 정수 0을 포인터로 암시 적으로 변환하는 것은 완벽합니다.
0과 "값 없음"을 구별하려면 NSNumber
수업:
NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil) // compare against nil
; // do one thing
else if([num intValue] == 0) // compare against 0
; // do another thing
다른 팁
if (var) {
...
}
The Wonderful World of C에 오신 것을 환영합니다. 정수 0 또는 널 포인터와 동일하지 않은 값은 사실입니다.
그러나 버그가 있습니다 : ints는 null이 될 수 없습니다. 그들은 Java와 마찬가지로 가치 유형입니다.
정수를 "상자"하려면 주소를 요청해야합니다.
int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0; // This is setting "the box" to null,
// NOT setting the integer value
제휴하지 않습니다 StackOverflow