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



댓글 없음:

댓글 쓰기

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

5월 14일 새벽에 chatGPT 4o가 발표되었습니다. 옵티마이즈, 옴니라는 의미인데 실시간 통역, 다자간 회의, 멀티모달 기능의 강화등이 보이네요.

  초격차로 OpenAI진영이 다시 앞서가는 모양을 보여주고 있습니다. 저도 새벽에 일어나자 마자 올라온 영상들과 글을 정리하고 있습니다. ㅎㅎ 영화 HER의 사진이 새벽에 많이 올라왔었는데 저도 안본 영화입니다. 주말에 한번 봐야 할 것 같습니다....