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)
}



댓글 없음:

댓글 쓰기

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

테슬라 차량이 무인 배송이 된 역사적인 사건입니다. ㅎㅎ

테슬라는 꿈을 그리는 기업입니다. 좀 황당하고 무섭기도 한데 시간이 지연되고 있지만 꾸준하게 발전하는 모습을 보여줍니다.  테슬라 차량을 주문한 고객이 무인 배송으로 차를 받는 영상입니다. ㅋㅋ  이러다가 정말 화성 탐사선에 옵티머스 로봇이 탑재되는 ...