Objective-C에서 `nil`의 탁월함

나는 요즘 Objective-C에서 1을 많이 코딩하지 않지만 Swift와 비교하여 내가 그리워하는 한 가지는 nil가 작동하는 방식입니다.

Swift에게 공평하게 말하면, Objective-C의 "nothing"개념은 일종의 엉망입니다. Swift에는 2개에 비해 4개의 다른 버전이 있기 때문입니다.

nil
빈 Objective-C 개체입니다.

Nil 비어 있는 Objective-C 클래스입니다.

NULL C에는 아무것도 없습니다.

NSNull Objective-C 컬렉션에서 null을 나타내는 데 주로 사용됩니다.
NSNull가 존재하는 이유는 Objective-C 컬렉션( NSArray , NSDictionary )이 nil를 다른 방식으로 사용하기 때문입니다. NSArraynil 종료되므로 다음과 같이 하면 됩니다.

NSArray *array = @[@"a", @"b", nil, @"c"];
// array = [@"a", @"b"] 


처음 두 요소만 사용할 수 있습니다. NSDictionary 에서 키를 nil로 설정하면 사전에서 제거되므로 NSNull는 "이것은 사전에 존재하며 아무것도 아닙니다."라고 말하는 데 사용됩니다.

기억해야 할 주요 사항은 NSNull 또는 NULL에 할당된 포인터가 있고 이를 사용하여 무언가를 시도하면 앱이 충돌한다는 것입니다. nil 반면에 일종의 마법입니다. nilNO ( false )로 평가되고 nil는 객체가 항상 nil를 반환하므로 즉, nil에 보낸 모든 항목이 nil로 반환되고 다음과 같이 앱이 충돌하는 대신 false로 평가되기 때문입니다.

if (dict != nil && dict.containsObjectForKey[@"a"]) { ... } 


다음과 같이 될 수 있습니다.

if (dict.containsObjectForKey[@"a"]) { ... } 


이것은 아마도 가장 덜 빠른 것일 것입니다. 하지만 이 스타일로 코딩하는 데 익숙하다면 환상적입니다. dictnil 일 가능성이 있는 많은(대부분?) 경우에 원하는 것은 아무 일도 일어나지 않는 것입니다. Swift가 처음 출시되었을 때 Brent said Swift로 전환하면 "광선 검에서 블래스터로 전환하려는 제다이 같은 느낌"이 제가 생각한 것입니다.

Originally posted on collindonnell.com



없는 것보다 훨씬 많지만 Apple 플랫폼용 소프트웨어를 작성하고 있는지 여부를 아는 것이 여전히 중요하다고 생각합니다.

좋은 웹페이지 즐겨찾기