post list

2015년 2월 15일 일요일

Swift(스위프트) 강좌: 빠르게 시작하기 3

딕셔너리(Dictionaries)


스위프트의 딕셔너리는 특정한 타입의 키와 그에 따른 값을 저장한다.  
Objective-C NSDictionary NSMutableDictionary 클라스와는 다릅니다.
NSDictionary와 NSMutableDictionary 클라스는 어느 종류의 객체든 키와 값으로 저장이 가능한 반면 그 저장된 객체의 속성에 대한 어떠한 정보도 제공하지 않습니다. 

딕셔너리 표현식 (Dictionary Literals)


1
2
3
4
5
6
7
// full form
var airports: Dictionary<String , String
= ["YYZ" : "Toronto Pearson" , "DUB" : "Dublin"]
// short form
var number: [ Int : String] = [1 : "one"2"two" ]
// shorter from
var city = ["seoul" : 02 , "daegu" : 053 ]
cs

딕셔너리의 접근 및 수정 Accessing and Modifying a Dictionary

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//개수 확인
println("The airports dictionary contains \(airports.count) items")
// 비었는지 확인
if airports.isEmpty {
    println(" The airports dictinary is empty")
}
// 추가
airports["LHR"] = "London"
// 수정
airports["LHR"] = "London Heathrow"
// 수정 : 메소드를 사용
// return 값은 밸류 타입에 해당하는 Optinal 값
if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
    println("The old value for DUB was \(oldValue).")
}
// 삭제 
airports["YYZ"] = nil
// 삭제 : 메소드 사용 
// return 값은 삭제된 값
if let removedValue = airports.removeValueForKey("DUB") {
    println("The removed airport's name is \(removedValue)")
}
cs

빈 딕셔너리 만들기 Creating an Empty Dictionary


1
var namesOfInteagers = [Int : String]()
cs


만약 context에서 이미 타입에 대한 정보를 가지고 있다면  [:] 통해서 빈딕셔너리를 초기화할 수 있습니다.. 


1
2
namesOfInteagers[16] = "sixteen"
namesOfInteagers = [:]
cs









2015년 2월 7일 토요일

Swift(스위프트) 강좌 : 빠르게 시작하기 2

옵셔널(Optionals)


옵셔널은 어떤값이 부재인지를 체크합니다. 옵셔널에 대한 개념은 C나 Objective-c 에서는 없습니다.  

옵셔널은 다음을 이야기 합니다.
  • 그곳에는 값이 "있다, 그리고 그것은  x와 동일하다. 
  • 그곳에는 값이 전혀"없다"
다시말해서  변수를 쓰고 싶은데 어플 실행중에 상황에 따라 변수에 값이 없을 수도 있을때 그것을 대처하기 위해 씁니다. 

선언은 다음과 같이 변수형뒤에 '?' 를 붙입니다.  값이 없을때는 nil 이 들어갑니다.
변수 선언하고 초기화 하지 않을 경우에는 자동으로 nil 이 들어갑니다.

1
2
3
4
5
6
var serverResponseCode : Int? = 404
// severResponseCode contains an actual Int value of 404
serverResponseCode = nil
//serverResponseCode now contains no value
var surveyAnswer: String
cs


if문과 강제 언랩핑(If Statements and Forced Unwrapping)

옵셔널이 값을 가지고 있는지 찾기 위해서 if문을 사용할수 있습니다. 

만약 옵셔널이 확실하게 값을 가진다는것을 알때 변수명 뒤에 '!' 를 붙여 줍니다. 이것을 강제 언랩핑이라고 합니다. 
만약 강제언랩핑한 변수에 값이 없을경우 런타임 에러가 발생합니다.
1
2
3
if convertNumber != nil {
    println("convertedNumber has an integer value of \(convertedNumber!).")
}
cs

배열(Arrays)

스위프트에서 배열은 특정 변수 타입만 저장 할 수 있습니다.. objective-c 의 NSArray 와 NSMutableArray 클래스와 다릅니다. 따라서 Int 형 타입 배열을 생성했다면 int 외에는 저장이 불가능합니다.  

배열 타입 축약 문법 (Array Type Shorthand Syntax)

정확한 배열 타입을 정확하게 쓰려면 Array<SomeType> 형태로 해야합니다. 
축약 형태인 [SomeType] 로 배열을 사용할 수 있습니다.  축약형태로 쓰는걸 권장합니다.

배열생성은 다음과 같이 합니다. 
값 타입이 같다면  타입을 명시 하지 않아도 됩니다.
1
2
var shoppingList : [String] = ["Eggs","Milk"]
var shoppingList2 = ["coffee","water"]
cs

배열의 접근 및 수정 Accessing and Modifying an Array

한꺼번에 코드로 설명합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//item 개수 확인
println("The shopping list contains \(shoppingList.count) item.")
//배열이 비었는지 확인
if shoppingList.isEmpty {
    println("The shopping list is empty.")
else {
    println("The shopping list is not empty.")
}
//배열 마지막에 추가
shoppingList.append("Flour")
shoppingList += ["Baking Powder"]
shoppingList += ["Chocolate Spread""Cheese""Butter"]
//배열로 부터 값 찾기 
var firstItem = shoppingList[0]
//배열에 값 넣기
shoppingList[0] = "six eggs"
// 법위를 지정해서 값을 넣을 수도 있습니다. 바꾸려는 범위가 실제 범위와 달라도 됩니다.
//4번 - 6번 index 의 값이  4,5번에 banans , apples 로 바뀝니다.
shoppingList[4...6] = ["Bananas""Apples"]
//특정 index 값 지우기 그리고 그 값 return
let mapleSyrup = shoppingList.removeAtIndex(0)
//마지막 값 지우기 그리고 그 값 return
let apple = shoppingList.removeLast()
cs


배열에서 반복문 사용하기 Iterating Over an Array

for-in 반복문을 사용하면 배열 안에 모든 값에 접근 가능합니다. 

인덱스가 필요하다면 enumerate 를 사용해서 배열을 돌릴 수 있습니다. 
enumerate 함수는 각각의 값과 인덱스를 결합한 튜플을 반환합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for item in shoppingList {
    println(item)
}
// Milk
// Flour
// Baking Powder
// Bananas
for (index, value) in enumerate(shoppingList) {
    println("Item \(index + 1): \(value)")
}
// Item 1: Milk
// Item 2: Flour
// Item 3: Baking Powder
// Item 4: Bananas
cs

배열의 생성과 초기화 Creating and Initializing an Array

초기값 할당 없이 특정 타입을 가진 빈 배열 만들기
1
var someInts = [Int]()
cs


다음엔 Dictionaries 부터 시작합니다. 최대한 필요한것만 적으려고 하는데 
은근히 길어지네요 

2015년 2월 1일 일요일

Swift(스위프트) 강좌 : 빠르게 시작하기 1

개발 환경 : Xcode6 ,iOS8

Swift 는 애플의 새로운 프로그래밍 언어입니다.

swift 언어를 배우기위해선 Swift reference guide 를 보는 것을 추천하지만 reference guide는 너무 길고 오래걸립니다. 그리고 영어입니다.  이 튜토리얼은 objective-c 같은 객체 지향 언어를 미리 알고있고 익숙하다는 가정하에 swift를 빠르게 배우고 싶은 사람을 위해 만들었습니다.

이 튜토리얼 내용은 Swift reference guide 기준으로 작성되었습니다.

Xcode6 를 시작하고 File\New\File... 에서 Playground  파일을 생성합니다.




전통적으로  새언어를 배울때는  Hello, world 란 구문을 출력해 봐야됩니다.

1
println("Hello,world")
cs
그럼 오른쪽에 결과를 즉시 볼수 있습니다.
swift에서는 입/출력이나 문자열을 다루기 위한 함수를 쓰기 위해 분리된 라이브러리를 불러올 필요가 없습니다.  전역 범위에 해당하는 코드는 프로그램의 진입점으로 사용되기 때문에 main 함수도 필요하지 않습니다. 그리고 끝에 세미콜론을 쓸필요도 없습니다. 쓰고 싶으면 써도 됩니다. 

그리고 상단메뉴에서 View\Assistant Editior\Show Assistant Editor 선택하면 콘솔창을 볼수 있습니다. 

상수(Constants)와 변수(Variables)


상수는 let 키워드를 사용하고  변수선언은 var 을 사용합니다.

1
2
3
4
let Constats  = 10
var Variables = 20
var x = 0.0 , y = 0.0 , z = 2.0 
let string = "Happy ori"
cs

타입명시(Type Annotations)


상수나 변수를 선언할때 바로 초기화를 할경우 알아서 설정이됩니다.

1
var welcomeHappyori : String 
cs

타입변환

1
2
3
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
cs

튜플(Tuples) 

튜플은 여러값들을 하나의 값으로 묶어 줍니다. 여러 값은 각각 동일한 타입일 필요도 없습니다.  이름을 지어줄 수도 있습니다.

1
2
3
let http404Error = (404"Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")
let http200Status = (statusCode: 200, description: "OK")
cs

각 튜플의 각 내용들은 분리된 상수나 변수로 분해할수 있고 접근도 가능합니다.

1
2
3
4
5
6
let (statusCode, statusMessage) = http404Error
println("The status code is \(statusCode)")
// prints "The status code is 404"
println("The status message is \(statusMessage)")
// prints "The status message is Not Found"
cs

튜플중 몇개만 필요하다면  "_" 로 무시할 부분을 처리하면 됩니다.

1
2
3
let (justTheStatusCode, _) = http404Error
println("The status code is \(justTheStatusCode)")
// prints "The status code is 404"
cs

0으로 시작하는 index number를 통하여 각각의 element value 에 접근 가능합니다.

1
2
3
4
5
6
7
8
9
println("The status code is \(http404Error.0)")
// prints "The status code is 404"
println("The status message is \(http404Error.1)")
// prints "The status message is Not Found"
println("The status code is \(http200Status.statusCode)")
// prints "The status code is 200"
println("The status message is \(http200Status.description)")
// prints "The status message is OK"
cs

계속....