본문 바로가기

교육/Swift

[swift] optional

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