1. optional
변수에 BOOL값을 하나 가지고 있는 구조체
BOOL이 true면 값을 가지고 있는 것이고
false면 값을 가지고 있지 않는 것이다.
! 를 통해 값을 강제 추출 할 수 있다.
2. 샘플 코드
var n1 : Int
var n2 : Int = 0
//var n3 : Int = nil // nil은 값이 없다는 표현
var n3 : Optional<Int> = nil //Int를 가지거나 값이 없거나
print(n3)
n3 = 10
print(n3)
// optional 구조체 Bool(나 값 있다 없다), Int
print(n3!) // forced unwrapping 강제 추출
// Int? => Optional<Int>
var n4 : Int? = nil
showType(n4)
print(n4)
//print(n4!) // 런타임 에러, 값이 없기 때문
// optional 타임을 사용하는 기본 코드
if n4 != nil
{
print("nil 아님",n4!)
}
else
{
print("nil")
}
// 함수의 optional
func foo( age : Int ) -> Int? // return 값을 뒤에 적음, 실패 가능성이 있는 함수는 대부분 optional타입 리턴
{
if age < 1
{
return nil
}
return age;
}
var ret1 = foo(10)
showType(ret1)
if ret1 != nil
{
print("성공",ret1)
}
// optional Binding => optional 타입에서 값을 꺼내는 간단한 코드
if let ret2 = foo(10) // Int nil이 아닐때만 주기 때문에
{
//ret2 타입?
showType(ret2) // Int, nil일땐 아에 안타기 때문
print(ret2)
}
// nil Coalesing operator
var ret3 = foo(-10) ?? 100 // type Int
print(ret3)
//var s = "adfad10"
//
//// s를 int로 변경
//var ret4 = Int(s)! // 런타임 에러("숫자가 아니라서)
//showType(ret4)
var s = "adfad10"
// s를 int로 변경
var ret4 = Int(s) ?? 0
showType(ret4)
3. 샘플코드2
//optional chaning
class Contact
{
var email : String? // 초기 값 없으면 디폴트 nil
}
class People
{
var contact : Contact?
}
var peo = People()
//peo.contact = Contact()
//peo.contact!.email = "a@naver.com" // 강제 추출, 없을경우 크래시
peo.contact?.email = "a@naver.com" // 있으면 넣고 없음 넘어감
if peo.contact != nil // 위 라인과 같은 의미
{
peo.contact!.email = "a@naver.com"
}
// 암시적 강제적 추출
// Int? : 값을 꺼낼 때 명시적 강제 추출이 필요 : Optional<Int>
// Int! : 값을 꺼낼 때 암시적으로 추출이 가능 : ImplicitlyUnwrappedOptional<Int>
var n : Int? = 10
print(n) // optional
print(n!) //강제 추출
var n2 : Int! = 10
showType(n2)
print(n2) // 암시적 강제 추출
print(n2!) // 위랑 같음
'교육 > Swift' 카테고리의 다른 글
[swift] 배열 (0) | 2016.08.04 |
---|---|
[swift] 문자열 (0) | 2016.08.04 |
[swift] 튜플 (0) | 2016.08.04 |
[swift] 연산자 (0) | 2016.08.04 |
[swift] 변수 고급 (0) | 2016.08.04 |