hello swift 2/5 - basic2

22
Welcome to Swift 2/5

Upload: cody-yun

Post on 10-May-2015

375 views

Category:

Software


3 download

DESCRIPTION

# Hello Swift 1/5 http://www.slideshare.net/ssusere2153e/hello-swift-01 # Table of Contents - static - typealias - loop with dictionary - readability numeric value - optional value - unwrapped optional value - binding optional - implicitly unwrapped optional - tuple

TRANSCRIPT

Page 1: Hello Swift 2/5 - Basic2

Welcome to Swift 2/5

Page 2: Hello Swift 2/5 - Basic2

•static

•typealias

•loop with dictionary

•readability numeric value

•optional value

•unwrapped optional value

•binding optional

•implicitly unwrapped optional

•tuple

다룰 내용

Page 3: Hello Swift 2/5 - Basic2

static

// 정적변수를 만드는것은 불가능합니다. 오로지 클래스 내부에서 정적멤버변수, 정적멤버함수를 만드는것만 가능합니다. 클래스를 다룰 때 다시 하도록 하겠습니다.

Page 4: Hello Swift 2/5 - Basic2

loop with dictionary

let numberOfLegs = ["spider":8,"dog":4, "ant":6]

for (animal,legCount) in numberOfLegs { println("\(animal) leg is \(legCount)")}

Page 5: Hello Swift 2/5 - Basic2

Optional Type

// Optional Type은 변수 선언 후 : 뒤에 변수의 Type과 함께 ?를 추가하여 지정할 수 있습니다.var optionalInteger1: Int? = 100

// Int?이라고 Optional Type을 지정하면, 내부적으로는 Optional<Int>로 치환합니다.var optionalInteger2: Optional<Int>

// 그럼 어디에 사용될까요? 123이라는 문자열은 toInt()를 통해 Int type으로 값이 변환됩니다. convertedValue가 코드상에서는 보이지 앟지만 Int?으로 Optional Type입니다.let value = "123"let convertedValue = value.toInt()

Page 6: Hello Swift 2/5 - Basic2

Optional Type

let value = "123"let convertedValue = value.toInt()// 위와 같은 코드는 문제가 되지 않습니다. 123이라는 문자열은 toInt()를 통해 정상적으로 Int type으로 값이 변환되기 때문입니다.

// 하지만 아래와 같은 코드는요?let value2 = "동해물과백두산이"let convertedValue = value.toInt()

Page 7: Hello Swift 2/5 - Basic2

Optional Type

let value = "123"let convertedValue = value.toInt()// 위와 같은 코드는 문제가 되지 않습니다. 123이라는 문자열은 toInt()를 통해 정상적으로 Int type으로 값이 변환되기 때문입니다.

// 하지만 아래와 같은 코드는요?let value2 = "동해물과백두산이"let convertedValue = value.toInt()

// 다행이 Swift에서는 문제가 되지 않습니다. 바로 toInt()가 반환하는것은 Int가 아니라 Int?이기 때문입니다. Int와 Int?는 무슨 차이 일까요? 바로 Optional한 Value를 가지고 있느냐 없느냐의 차이입니다.

Page 8: Hello Swift 2/5 - Basic2

Optional Type

let value = "123"let convertedValue = value.toInt()// 위와 같은 코드는 문제가 되지 않습니다. 123이라는 문자열은 toInt()를 통해 정상적으로 Int type으로 값이 변환되기 때문입니다.

// 하지만 아래와 같은 코드는요?let value2 = "동해물과백두산이"let convertedValue = value.toInt()

// 다행이 Swift에서는 문제가 되지 않습니다. 바로 toInt()가 반환하는것은 Int가 아니라 Int?이기 때문입니다. Int와 Int?는 무슨 차이 일까요? 바로 Optional한 Value를 가지고 있느냐 없느냐의 차이입니다.

// Optional Type이라는 것은 값을 반환할 때 값이 없는것을 지칭하는 nil이라는 값을 반환할 수 있다는 Option을 염두해두라는 이야기합니다. 아직도 이야기는 어렵습니다.

Page 9: Hello Swift 2/5 - Basic2

Optional Type

// Java에서는 String parse to Int 구문을 try~catch를 이용하여 아래와 같이 작성할 수 있습니다. 다른 언어에서는 try-catch 구문이 아니더라도, 해당 메소드가 처리 실패시 반환하는 값을 알고 있어야, 상황에 따른 예외처리가 가능합니다.

Page 10: Hello Swift 2/5 - Basic2

Optional Type

// 하지만 아래와 같은 코드는요?let value2 = "동해물과백두산이"let convertedValue = value.toInt()

// toInt()의 결과로 실패 시 반환하는 Int?(Optional Type)은 nil값을 가집니다. 물론 Objective-C에서도 nil값이 있지만, Swift에서는 Object뿐만이 아니라 모든 타입(구조체,열거형,기본타입을 포함)에서도 nil값을 가질 수 있습니다.

Page 11: Hello Swift 2/5 - Basic2

Unwrapped Optional Value

let value = "123"let convertedValue = value.toInt()

let result = convertedValue+10// 위와 같은 코드는 어떤결과를 반환할까요? 123+10은 133이니, 133이라는 값이 result에 assign될까요?

Page 12: Hello Swift 2/5 - Basic2

Unwrapped Optional Value

let value = "123"let convertedValue = value.toInt()

let result = convertedValue+10// 위와 같은 코드는 어떤결과를 반환할까요? 123+10은 133이니, 133이라는 값이 result에 assign될까요?

// 아닙니다. 위와 같은 에러를 반환합니다. 즉 nil이라는 optional한 특수한 value를 포함하고 있는 Int?와 10이라는 값을 +연산자를 통해 연산할 수 없다는 이야기입니다.

Value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?

Page 13: Hello Swift 2/5 - Basic2

Unwrapped Optional Value

let value = "123"let convertedValue = value.toInt()

let result = convertedValue!+10// 그래서 Wrapped된 Optional한 Variable을 Unwrapped시켜주는 !를 사용해야 합니다.

// 그런데 우리는 여기에서 주의해야 합니다. Optional Variable에 !를 이용해서 Wrapped 후 값을 꺼내오는 코드를 작성할때, 만약 Optional Variable에 nil이 있을 경우 Runtime Error가 발생합니다.

Page 14: Hello Swift 2/5 - Basic2

Forced unwrapped optional value

//그런데 if나 while의 condition 영역에서는 조금 특이하게 작동합니다. 즉, Optional Variable을 Unwrapped시켜주는 !를 사용하지 않아도, 강제로 Unwrapped됩니다. 아래 예제를 살펴보도록 하겠습니다.

let value = "123"if let convertedValue = value.toInt() { var result = convertedValue+10}

//차이점이라면 toInt()메소드의 반환결과가 let이나 var변수를 저장되는데, 이때 if의 condition 영역에 선언 및 assign하고 있다는 것 입니다. 즉, if의 condition 영역에서는 Wrapped되어 있는 변수가 강제로 Unwrapped되는 상황이 발생한다는 것 입니다.

// 바로 if나 while의 condition구문에서 forced unwrapping되는 것을 가리켜 “Optional Binding”이라고 합니다.

Page 15: Hello Swift 2/5 - Basic2

Implicitly Unwrapped Optionals

//그런데 Optional Type은 너무 불편합니다. 해당값이 Optional Type인지 아닌지를 판단하고, 값에 접근할때는 Unwrapped시켜주는 !를 이용해야 합니다.

// 바로 이러한것을 해결해 주는 방법이 아래와 같습니다.let value = "123"let convertedValue: Int! = value.toInt()if convertedValue { var result = convertedValue+10}

// 아래 코드와 비교해 보겠습니다.let value = "123"let convertedValue: Int? = value.toInt()if convertedValue { var result = convertedValue!+10}

Page 16: Hello Swift 2/5 - Basic2

Implicitly Unwrapped Optionals

//그런데 Optional Type은 너무 불편합니다. 해당값이 Optional Type인지 아닌지를 판단하고, 값에 접근할때는 Unwrapped시켜주는 !를 이용해야 합니다.

// 바로 이러한것을 해결해 주는 방법이 아래와 같습니다.let value = "123"let convertedValue: Int! = value.toInt()if convertedValue { var result = convertedValue+10}

// 아래 코드와 비교해 보겠습니다.let value = "123"let convertedValue: Int? = value.toInt()if convertedValue { var result = convertedValue!+10}

Page 17: Hello Swift 2/5 - Basic2

typealias

//typealias는 C/C++의 치환 역활을 하는 typedef와 동일한 역활을 수행합니다. 아래와 같이 type을 재정의할 수 있습니다.

typealias AudioSample = UInt16typealias NameAndAge = Dictionary<String,Int>var ourPeople = NameAndAge()ourPeople["Cody"] = 32

//개인작업에서는 유효할 지 모르겠으나, 팀작업에서는 코드리뷰 중 typealias에 의해 치환된 내용이 나올 때 치환된 코드가 있는곳으로 이동하여, 확인을 해야되는 번거러움이 분명히 존재합니다. 지나친 사용은 독이 될 수 있는 문법입니다.

Page 18: Hello Swift 2/5 - Basic2

readability with under bar

//아래와 같이 특정 지점에 under bar를 사용하여 0의 갯수를 카운트하는데, 조금 더 수월하게 해줄 수 있습니다. 하지만, 이것 역시 잘못된 위치에 under bar가 포함될 경우 디버깅 난이도를 급격히 끌어올 릴 수 있을 것 같습니다-_-

let price1 = 1000000000000000let price2 = 1_000_000_000_000_000

Page 19: Hello Swift 2/5 - Basic2

tuple//튜플은 여러개의 값을 묶어서 여기저기에서 사용할 수 있는 기능힙니다.

// assign and accesss with indexlet nameAndAge = ("Cody",32)nameAndAge.0nameAndAge.1

// decompose with another constant valuelet (name,age) = nameAndAgenameage

// or if you want single value without anotherlet (justName,_) = nameAndAgejustName

// make tuple variable or constant and using the value in tuplelet currentStatus = (code:404,message:"Not found")currentStatus.codecurrentStatus.message

Page 21: Hello Swift 2/5 - Basic2

•Optional Type 대신에 무조건 Implicitly

Unwrapped Optional을 사용하면 되지 않을까?

•typealias를 어느 정도 선에서 사용해야 할까?

•under bar를 이용해 numeric value를 작성하는 것

은 정말 readability를 올려줄까? 특정값이 코드상에

하드코딩되는 일은 드믄일 아닌가?

생각해 볼 내용

Page 22: Hello Swift 2/5 - Basic2

감사합니다.

let writer = ["Cody":"Yun"]