2014년 12월 22일 월요일

애플의 새로운 개발언어 Swift - 옵셔널#5

// Playground - noun: a place where people can play

import UIKit

//Nil Coalescing연산자는 이항 연산자로 a ?? b 같은 형태로 사용한다
//왼쪽 피연산자에는 욥셔널 형식의 데이터 또는 표현식이 오고
//오른쪽에는 왼쪽 피연산자가 nil 경우 리턴할 기본값 또는 표현식이 온다.
func getUserNameFromDB(id: Int) -> String? {
    if(id<=0) {
        return nil
    }
    
    return "James"
}

var james = getUserNameFromDB(123) ?? "John doe"
var someone = getUserNameFromDB(-1) ?? "John doe"

println(james)
println(someone)

//옵셔널 속성을 가진 클래스 
class Contact {
    var address:String?
    var tel:String?
    var email:String?
}

class Person {
    var contact: Contact?
}

//이런 경우 옵셔널 바인딩을 통해 안전하게 접근해야 한다.
let p = Person()
if let contact = p.contact {
    if let email = contact.email {
        println(email)
    }
    else {
        println("nil email")
    }
} else {
    println("nil contact")
}

//이런 경우 너무 불편하므로 옵셔널 체이닝 기능을 지원한다
let p2 = Person()
var email2 = p2.contact?.email?
println(email2)

//옵셔널 체이닝과 쓰기(실패한 경우)
p2.contact?.email? = "kim@naver.com"
if let email = p.contact?.email? {
    println(email)
} else {
    println("nil email")
}

//이번에는 Contact2 email 값이 초기화 되어 있었기 때문에 성공했다.
class Person2 {
    var contact:Contact2?
    init() {
        contact = Contact2()
    }
}

class Contact2 {
    var address:String?
    var tel:String?
    var email:String? = "N/A"
}

let p3 = Person2()
p3.contact?.email? = "kim@daum.net"
if let email = p3.contact?.email? {
    println(email)
}

//옵셔널 형식으로 자동 변경
//옵셔널 체이닝에서 마지막 요소가 옵셔널이 아닌 경우
class Contact3 {
    var address:String?
    var tel:String?
    var email:String = "lee@daum.net"
}
class Person3 {
    var contact:Contact3?
    init() {
        contact = Contact3()
    }
}
//옵셔널 체이닝의 결과로 리턴되는 값을 자료형은 항상 옵셔널 형식이다
//그래서 마지막 부분에 있는 email 자료형이 String이지만 실제로 리턴되는 
//값은 String? 된다.
let p4 = Person3()
let email = (p4.contact?.email)!
if let email = p4.contact?.email {
    println(email)
}



댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

'일론 머스크' '젠슨 황' AI 리더들, 그들의 성공 비결은 바로 이것 - 누가 부자가 되는가 영상입니다. ㅎㅎ

  책을 통해서만 접했던 내용들을 영상으로 보니 더 실감이 납니다. KBS에서 방송된 내용인데 주말에 보시면 좋은 영상입니다. 엔비디아의 주가가 이해가 됩니다. ㅋㅋ 생각보다 미국시장이 강한 것이 AI는 거의 미국과 중국이 주도하는 시장이 되고 있습...