강의로 돌아가기
-

Implicitly Unwrapped Optional

Implicitly Unwrapped Optional 과 관련되어
//Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42) 입니다.

var title : String = "Story"
var url : String! = nil
var book : String = "\(title)"

url = "URL" 

book += "  \ (url)"
print ("\ (book)") // 출력값 "Story  Optional("URL")

위와 같이 나옵니다.
강의의 Implicitly Unwrapped Optional 에 따르면
url! 을 사용하지 않고 바로 스트링을 합쳐 Story URL 이 나와야 하는것 아닌지 궁금합니다.

book += \ (url!)
이렇게 할 경우 Story URL 이 출렵됩니다.

3 개의 답변
Demi

질문을 이해하지 못했는데요.

book += "  \(url)"
print ("\(book)") // 출력값 "Story  Optional("URL")

를 쓰면 Story Optional(URL) 이 출력되어야 하고,

book += "  \(url)!"
print ("\(book)") // 출력값 "Story  Optional("URL")

를 쓰면 Story URL이 출력돼야 합니다.

-

url은 String! 타입 즉 암시적으로 언래핑된 옵셔널이기 때문에 '!'가 붙었다고 하더라도 옵셔널 타입입니다.
즉 nil이 될 수 있다는 말입니다.

url만 놓고 보면 처음에 nil로 초기화해줬다가 나중에 URL이라는 스트링을 넣어줬죠.
그래도 url은 암시적으로 언래핑된 옵셔널 타입이기 때문에 nil도 될 수 있습니다.
var url : String! = nil
url = "URL"

따라서 처음에 의도하신 결과를 내기 위해서는 url을 값으로 사용할때 !를 붙여야 합니다.
\(url!)

var url : String! = "URL"
이렇게 값을 넣어도 마찬가지로 사용시 !를 붙여야 합니다.

그리고 값으로 사용시 강제언래핑을 하고 싶지 않으시다면
암시적 언래핑 타입의 변수를 다른 타입으로 명시적으로 선언된 변수에 넣어서
해당 변수를 값으로 사용해주셔도 됩니다.

var url: String! = "URL" => var url2: String = url
이렇게 하시면 url2를 바로 사용 가능합니다.

타조

다들 질문을 이해를 못하시는 것 같은데... 강의 마지막에 해준 그대로 했는데 에러가 떴나는 얘기 아닌가요?
Implicitly Unwrapped Optional 을 사용한다면 정의부분에만 !를 써주면 하위 코드에는 !를 안 써도 된다고 말씀하셨는데 에러가 뜬다는 거잖아요...

저도 이게 궁금해서 찾아보고 있는데 모르겠네요 ㅠㅠ

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.