2014-11-08 7 views
1

내가 NSNullNilLiteralConvertible을 준수하기 위해 노력하고 준수 NSNull,하지만 난 좌절의 엄청난 양의 실행 해요 : 모든만들기가 NilLiteralConvertible

extension NSNull : NilLiteralConvertible{ 

    required convenience init(nilLiteral:()){ 
     self.init() 
    } 
} 

첫째, 나는 init을 강요 해요 a convenience 하나, 확장에 지정된 초기화 프로그램을 추가 할 수 없습니다.

그런 다음 컴파일러가 갑자기 움직여서 init이 required이어야한다고하고 즉시 required 초기화 프로그램을 확장 프로그램이 아닌 직접 추가해야한다고 불평하자. WTF?!

playground

누구나 일어나고 어떻게 NSNull이 간단한 프로토콜을 준수하기 위해 무엇을 알고?

Xcode 놀이터에서 테스트 중입니다.

+0

사용 사례는 무엇입니까? – Shuo

답변

1

NSNull ~ NilLiteralConvertible을 준수해야 할 이유가 없어야합니다. 프로토콜은 공개되어 있지만 주로 내부적으로 NSZone으로 사용되며 해당 언어로 Optionals를 구현합니다 (소스 here 참조). Optional<NSNull>으로 변수를 선언하면 원하는 동작을 얻을 수 있습니다. 이 작동하지 않는

: Optional.swift의 소스와 같이 Optional 열거는 당신을위한 NilLiteralConvertible을 준수

var null: NSNull 

null = NSNull() // <null> 
null = nil // error: nil cannot be assigned to type 'NSNull' 

을하지만이 작업을 수행합니다

var null: NSNull? 

null = NSNull() // <null> 
null = nil // nil