신속한 언어에서 null / nil
신속한 프로그래밍 언어로 다음을 어떻게 정의합니까?
- 없는
- 무
- 무
- [NSNull null]
즉, 이러한 각 객관적인 c 용어와 신속하게 상응하는 것은 무엇일까요? 또한 구조체 및 열거 형과 같은 비 객관적인 c 유형에 대한 특정 사용 사례가 있는지 여부를 알고 싶습니다. 미리 감사드립니다.
등가물에 관하여 :
NULLSwift에는 상응하는 것이 없습니다.nilnilSwift 에서도 호출 됩니다.NilSwift에는 상응하는 것이 없습니다.[NSNull null]Swift에서 NSNull ()로 액세스 할 수 있습니다.
참고 : 이것은 읽기와 놀이를 기반으로 한 내 추측입니다. 수정을 환영합니다.
그러나 Swift의 nil / NULL 처리는 Objective C와 매우 다릅니다. 안전과 관리를 강화하도록 설계되었습니다. 설명서의 선택 사항을 읽으십시오 . 일반적으로 변수는 NULL이 될 수 없으며 "값이 없음"을 나타내야 할 때 선언적으로 수행합니다.
낮은 수준의 포인터 작업에서 NULL을 사용해야하는 경우 다음을 사용하십시오.
UnsafePointer<Int8>.null()
nil"가치 없음"을 의미하지만 Objective-C와는 다른 모든 의미에서 완전히 구별됩니다 nil.
선택적 변수에만 할당 할 수 있습니다. 리터럴과 구조체 모두에서 작동합니다 (예 : 힙 기반 항목뿐만 아니라 스택 기반 항목에서도 작동합니다).
옵션이 아닌 변수 nil는 클래스 인 경우에도 할당 할 수 없습니다 (예 : 힙에 있음).
따라서 그것은 명시 적으로 NULL포인터가 아니며 하나와 유사하지도 않습니다. 동일한 의미 론적 이유로 사용하기위한 것이므로 이름을 공유합니다.
Swift 는 Objective-C nil와 동일하지 않습니다 nil.
Objective-C에서 nil존재하지 않는 개체에 대한 포인터입니다. Swift에서는 nil포인터가 아니라 특정 유형의 값이없는 것입니다. nil객체 유형뿐만 아니라 모든 유형의 옵션을로 설정할 수 있습니다 .
NULL Swift에는 상응하는 것이 없습니다.
nil Swift에서는 nil이라고도합니다.
Nil Swift에는 상응하는 것이 없습니다.
[NSNull null] Swift에서 다음과 같이 액세스 할 수 있습니다. NSNull()
Swift의 Null 개념은 Optional enum으로 다시 시작됩니다. 열거 형은 다음과 같이 정의됩니다.
enum Optional<T> {
case Some(T)
case None
}
이것이 의미하는 바는 Swift에서 초기화되지 않은 변수 / 상수를 가질 수 없다는 것입니다. 이렇게하려고하면 변수 / 상수를 초기화 할 수 없다는 컴파일러 오류가 발생합니다. Optional enum으로 래핑해야합니다.
이것은 Swift에서 찾을 수있는 유일한 Null 개념입니다.
문제가있는 시나리오에서이 문제가 발생했습니다 : 설정 번들
누군가가 시간을 낭비하지 않도록 (잃어버린 것처럼!)
let userDefaults = UserDefaults.standard
var settingsValue = userDefaults.string(forKey: "user_preference")
if settingsValue == nil {
settingsValue = "1"
}
if (settingsValue?.isEqual("1"))! {
//Do something
} else {
//Do something
}
사용자가 처음으로 앱 설정을 열 때까지 시스템은 nil을 반환합니다. 그리고 제 경우에는 앱 이 충돌 합니다.
if !(myDATA is NSNull) {
// optional is NOT NULL, neither NIL nor NSNull
} else {
// null
}
참고 URL : https://stackoverflow.com/questions/24043589/null-nil-in-swift-language
'program story' 카테고리의 다른 글
| AJAX 기반 페이지에 Facebook "좋아요"버튼을 추가하는 방법 (0) | 2020.11.10 |
|---|---|
| HTML iframe-스크롤 비활성화 (0) | 2020.11.10 |
| .NET 5 RC1을 제거 할 수 없습니다. (0) | 2020.11.10 |
| HTML 버튼 / 제출의 전체 스타일 제거 (0) | 2020.11.10 |
| C #에 해당하는 C ++의 Foreach 루프 (0) | 2020.11.10 |