ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift nil, 왜 null이 아닐까?
    Swift 2021. 12. 19. 02:23

    출처 : https://www.quora.com/Why-does-Swift-use-nil-instead-of-null

     

    Swift does allow use of null in a C-like way, but also has a more abstract concept of optional values.

    In a language like C, all pointer types are optional and all "non-pointer" types are not. This is a direct consequence of how C models optional values: pointers that point nowhere — that have an address value of 0 on many systems — are the null value. The "nowhere" address does not have to be 0, by the way.

    What if we want an optional int? Well, too bad — that's not a pointer so there is no nulling it out. In the C language, being a pointer and being optional are synonymous. Many other languages follow this practice, including C++ and Java. In Java primitive types are not optional, only object types are. Not surprisingly, objects are basically pointer types whereas primitive types are not. In these languages, "object" types are always optional whereas "value" types are never optional.

    The term null thus has come to refer equally to two distinct concepts: an optional value that is not set and the pointer with a value of the system "nowhere" address. In fact, these concepts are so often bound together that another name for "optional types" is "nullable types" — that's the terminology that is more usual with Java or C#.

    There is more than one way to implement nullability, however, and there are good reasons to write code with non-nullable objects and nullable primitives. Should every nullable local int be a heap allocated pointer? Seems like a bad choice.

    Swift provides clever implementations of nullability for many types and situations and uses both static and dynamic checks to prevent non-nullable object types from being used in a manner contrary to their type. However, Swift also allows writing real pointer code that interacts with pointers in a C-like way. Bowing to convention, there is still a null value that refers to the system nowhere address. For everything else — the optional types that may or not be backed with pointers — there is nil.

     

    내가 영어를 맞게 해석한건지 모르겠지만

    C에서 말하는 Null은 아무데도 가리키지 않는 포인터다.

    그런데 nil은 추상적인 개념도 있다. 포인터로 지원되거나, 지원되지 않는 유형에 nil 이 있다. 

     

    그리고 찾아보다보니, Swift nil 과 Objective-C 의 nil의 차이에 대해서도 있었다.

    하나의 예시로 본게

    Swift는 var test: Bool? 이라고 했을때 true / false/ nil 이렇게 세가지의 유형의 value로 표현될 수 있는데

    Objective-C에서는 그렇지 않다는 것이다. 

     

    In Swift, object references come in two flavours: Optional and non-optional. Optionals can be nil or not nil. Non-optionals cannot be nil ever. In Objective-C, any object reference could be nil.

     

    출처 : https://stackoverflow.com/questions/37953034/what-is-the-difference-between-nil-in-objective-c-and-optional-in-case-of-swift

     

    정확히 내가 구분되어 생각이 잘 된건지 모르겠다, 하지만 우리가 알고있던 null의 개념이 nil에 포함되어있다고 생각한다.

     

    728x90

    'Swift' 카테고리의 다른 글

    Swift AsyncSequence (비동기 시퀀스에 대한 지원)  (0) 2021.12.22
    Feature flags in Swift  (0) 2021.12.22
    Property Wrapper  (0) 2021.12.13
    swift Pecker란  (0) 2021.11.15
    Xcode 빌드 속도 높이기2 - cocoapods-binary-cache  (1) 2021.11.11

    댓글

Designed by Tistory.