Xcode 9.*에서 Swift 를 사용해서 코딩할 때 옵셔널에 대한 기본 데모 코드들입니다. #3

in #kr7 years ago (edited)

기존 개발언어들과 다르게 Swift는 에러가 날 수 있는 상황들을 미리 미리 체크하는 기능들이 꼼꼼하게 추가되어 있습니다. 제가 강의하는 언어들 중에 C#이나 Python도 있는데 이런 개발언어에서 대충 넘어길 수있는 부분들이 Swift에서는 그냥은 넘어가지 않는 까다로운 부분들이 많이 있습니다. 처음 Swift를 사용할 때 매우 귀찮은 것중에 하나가 바로 옵셔널에 대한 개념과 처리입니다.
옵셔널은 값이 없을 수도 있다는 것을 다루는 타입니다. 일반 형식은 nil(다른 언어에서는 null이라고 표기)로 초기화하거나 대입할 수 없습니다. 옵셔널 타입만 가능합니다. 그래서 옵셔널 타입은 형식?와 같이 표기합니다.

import UIKit

//옵셔널 변수 만들기
var name : String = "전우치"
var list : [Int]? = nil
var URL : String! = nil
URL = "http://www.credu.com"

print("이름: \(name) 리스트: \(list!.count)  URL: \(URL!)")

실행하면 아래와 같이 바로 에러가 발생합니다.
스크린샷 2018-03-08 오후 5.18.13.png

그래서 옵셔널 타입은 아래와 같이 안전하게 접근해야 합니다. 값이 있는지를 체크하고 값을 빼낼 때는 언랩연산자인 !를 붙여서 사용합니다.

//옵셔널 바인딩
var description:String = "이름: \(name)"
if list != nil {
    description += " 배열갯수: \(list!.count) "
}
if URL != nil {
    description += " 주소: \(URL!)"
}

print("\(description)")

그런데 이 경우 if let을 숙어처럼 사용합니다. 옵셔널 바인딩 구문이라고 보통 부릅니다. 값이 있으면 ㅣ에 대입을 하고 이미 언랩을 한 값이니 바로 l.count라고 호출합니다.

if let l = list {
    description += " 배열갯수: \(l.count)"
}
if let u = URL {
    description += " 주소: \(u)"
}

print("\(description)")

Coin Marketplace

STEEM 0.17
TRX 0.16
JST 0.028
BTC 74526.95
ETH 2591.86
USDT 1.00
SBD 2.44