2014-10-14 6 views
2

나는 사람들은 옵션 값에 대한 테스트, 신속한 언어로 어디에서나 볼 문들이 안전하게 2 가지 방법으로, 언랩을 강제 할 수 있도록하는 경우에 :"nil"과 ".None"에 대한 선택 사항 테스트의 차이점은 무엇입니까?

if optionalValue != .None { 

... some code ... 

} 

이나 차이가 무엇

if optionalValue != nil { 

... some code ... 

} 

와 어떻게 든 할 수 어떤 식 으로든 내 앱/코드에 영향을 미칩니 까? 무엇이 더 좋습니까?

답변

5

정상적으로 사용하는 경우에는 차이점이 없으며 서로 바꿔 사용할 수 있습니다. .NoneOptional<T> 열거 형으로 구현 된 nil (부재) 값의 열거 형 표현입니다.

.Nonenil의 등가는 NilLiteralConvertible 프로토콜 및 !=== 사업자의 과부하를 구현하는 Optional<T> 형 덕분입니다.

이 같은 전무가 할당되고 싶은 경우에 당신은 당신의 자신의 클래스/구조체/열거 형에 해당 프로토콜을 구현할 수

:

struct MyStruct : NilLiteralConvertible { 
    static func convertFromNilLiteral() -> MyStruct { 
     return MyStruct() // <== here you should provide your own implementation 
    } 
} 

var t: MyStruct = nil 

(변수가 옵션으로 선언하지 않는다)

3

단어 .None을 명령 클릭하면 대답을 쉽게 사용할 수 있습니다. 여기 스위프트 패키지가 계시 무엇 :

enum Optional<T> : Reflectable, NilLiteralConvertible { 
    case None 
    case Some(T) 
    init() 
    init(_ some: T) 

    /// Haskell's fmap, which was mis-named 
    func map<U>(f: (T) -> U) -> U? 
    func getMirror() -> MirrorType 
    static func convertFromNilLiteral() -> T? 
} 

그래서 대부분의 경우에 사용할 수 있습니다 (I이 마지막 지점에 대해 확실하지 오전하지만) 옵션 값은 프로토콜 NilLiteralConvertible을 준수해야하기 때문이다.