swift optional

    optional ?

    swift언어에서는 변수형을 지정하지 않아도 초기화 할 때 컴파일러가 지정해 줍니다.
    하지만, null처럼 아무 값이 없는 표현은 swift에서는 포인터가 아니므로 nil로 지정됩니다.
    Pascal의 영향을 받은 것 같네요.
    Apple에서 직접 참고 해보았습니다. 

    Apple Developer Site -> Swift_Programming_Language


    var x: Int? // nil이 들어간 변수가 됩니다.
    


    이렇게 nil이 들어 갈 수 있도록 예외처리 겸 변수를 선언 할 수 있도록 만든 변수를 optional이라 합니다.하지만, 문제가 됩니다. 여기에 값이 할 당 되면 java에서 wrapper class에 wrapping되는 것 처럼 

    Optional(값)
    
    으로 감싸이게 되요.


    첫 번째 방법은 위의 optional변수 x를 일반변수 z에 넣으려고 합니다. 변수의 값을 활용하려면 Unwrapping을 해주어야되요. java에서는 implicitly unwrapping으로 자동형변환이 되지만 여기서는 !로 포장을 풀어서 상수처럼 만들어줍니다. 이 처럼 강제로 Unwrapping을 해주는 것을 Forced Unwrapping이라고 합니다.


    var z: Int
    z = x! // !가 Optional을 풀어 값을 z로 넣어줍니다.

    두 번째 방법은 임시로 상수, 변수를 만들어 넣으면 Auto Unwrapping됩니다.

    if let z = x { 
    
    }

    이렇게 하면 예외처리를 직접 if문으로 해주어야 하는데 안해주면 컴파일러가 삐져요.
    그러면 if문을 써서 같이 Unwraping을 해줄 수 있는데 이것을 Optional Binding이라고 합니다.

    if let z = x {
      println("x \(x)")
    } else {
      println("binding error")
    }

    nil처리가 정말 필요 없을 때가 있을 수도 있습니다. 이러할 때는 암묵적으로 Unwrapping해주는 변수를 만들 수 있어요. 이 경우에는 자료형을 !으로 선언해주면 Optional() Type을 Unwrapping해서 받을 수 있습니다. 이러한 방법을 Implicitly Unwrapping이라 합니다.

    var y: Int!
    y = x
    


    Posted by 플랑