Swifter {Swift Developer}

메뉴

Swift 입문10 – Collection

Array형

Array형은 요소를 순차적으로 저장합니다. 만드는 방법은 몇가지가 있으며 첫번째는 요소를 []으로 묶고 요소는 쉼표(,)로 구분합니다.

var arr = [1,2,3,4,5]

요소에 접근하는 변수명에 요소번호를 매기며 시작은 0부터 시작됩니다.

[swift]

import UIKit

var arr = [1,2,3,4,5]

println(arr[0])

[/swift]

swift-collection-array

여기에 배열에 요소를 추가하려면 append(요소)를 사용합니다.

[swift]

import UIKit

var arr = [1,2,3,4,5]

arr.append(6)

println(arr)

[/swift]

배열 마지막에 6이 추가되어 있을 것을 확인할 수 있고 extend(범위)를 사용하여 일정 범위를 정해 추가도 가능합니다.

[swift]

import UIKit

var arr = [1,2,3,4,5]

arr.append(6)

arr.extend(7 … 10)

println(arr)

[/swift]

swift-collection-array-extend

 

단, 위 소스코드에서 arr.append(“11”)을 하면 Int형이 아니라고 하면서 오류가 발생할 것입니다. 이는 Objective-C언어에서 사용하던 NSArray와는 다르다는 것을 상기해야 합니다. Objective-C언어에서는 형을 신경쓰지 않고 배열에 들어가기 때문이지만 Swift언어에서는 다른 형을 배열에 넣을 수 없습니다.

또한, 명시적으로 형을 지정하고 싶다면 아래와 같이 변수명 뒤에 []을 추가해서 형을 지정할 수 있습니다.

var arr : [int] = [1,2,3,4,5]

제네릭(Generic)에 대해서는 좀 있으면 배우기 때문에 자세한 내용은 나중에 알려드리겠습니다.

위와 같이 배열을 선언하면 NSArray처럼 다양한 형을 넣을 수 있는 배열을 만들 수 있습니다. 이 때 지정하는 형이 AnyObject라는 것입니다.

[swift]

import UIKit

var arr : [AnyObject] = [1,2,"3",4,5]

arr.append("6")

println(arr)

[/swift]

swift-array-anyobject

참고로 Swift언어에서도 NSArray를 사용할 수 있지만, Swift가 추구하는 안전성을 고려한다면 Array형을 추천합니다.

 

Dictionary 형

Array형은 요소에 순서를 붙여 저장하고 사용하는데 Dictionary형은 키와 값을 묶어 저장합니다. 값에 접근할 때에는 키를 바탕으로 접근하게 됩니다.

var dic = [1:”아버지”, 2:”엄마”, 3:”동생”]

[]안에 요소를 추가하며 :앞에 키를 입력하고 뒤에 값을 선언합니다. 요소는 쉼표(,)로 구분합니다.

[swift]

import UIKit

var dic = [1:"아빠", 2:"엄마", 3:"동생"]

println(dic[2])

[/swift]

dictionary1

Dictionary형에 요소를 추가하는 것은 아래와 같습니다.

dic[4] = “삼촌”

위와 같이 요소의 값을 변경하는 것도 같은 형태로 선언해서 처리할 수 있습니다.

만약 특정 요소를 삭제하고 싶다면 아래와 같이 선언합니다.

dic[3] = nil

다시 결과값에 대해서 이야기해봅시다. 특정 키 요소를 콘솔에 표시가 된것을 보면 Optional형입니다.

이는 지정된 키값이 nil일지도 모르기 때문입니다. 사용할 때 풀어준다고 보시면 됩니다.

[swift]

import UIKit

var dic : [Int : String] = [1:"아빠", 2:"엄마", 3:"동생"]

dic[4] = "삼촌"

dic[3] = "여동생"

dic[1] = nil

if let value = dic[4] {

println("(value)")

} else {

println("nil!")

}

[/swift]

swift-dictionary-nil

참조 및 복사본

[swift]

import UIKit

var dic1 = [1:1, 2:4, 3:9, 4:16]

var dic2 = dic1

println(dic1)

println(dic2)

[/swift]

swift-dictionary-copy

dic1과 dic2는 같습니다.

[swift]

import UIKit

var dic1 = [1:1, 2:4, 3:9, 4:16]

var dic2 = dic1

println(dic1)

println(dic2)

dic2[3] = nil //dic2 요소 제거

println(dic1)

println(dic2)

[/swift]

dic2는 dicA를 참조한 것이 아니며, dic2는 dic1을 복사한 것입니다.

Array형도 똑같습니다.

[swift]

import UIKit

var dic1 = [1:1, 2:4, 3:9, 4:16]

var dic2 = dic1

println(dic1)

println(dic2)

dic2[3] = nil //dic2 요소 제거

println(dic1)

println(dic2)

var arr1 = [1,2,3,4,5]
var arr2 = arr1
println(arr1)
println(arr2)
// arr1과 arr2가 출력한 내용은 같습니다.
// arr2 0번 요소 제거
arr2.removeAtIndex(0)
println(arr1)
println(arr2)
// arr1과 arr2는 다른 결과를 출력하기 때문에 Array형도 Dictionary형처럼 복사하는 것입니다.

[/swift]

Dictionary형과 Array형은 복사하지만, Objective-C에 사용된 NSDictionary와 NSArray는 참조입니다.

지금까지 Array형이나 Dictionary형은 var를 선언해서 변수로 사용해 왔습니다. 변경할 수 없는 고정 형태로도 사용하려면 let으로 선언하면 됩니다.

[swift]

import UIKit

var dic1 = [1:1, 2:4, 3:9, 4:16]

var dic2 = dic1

println(dic1)

println(dic2)

dic2[3] = nil //dic2 요소 제거

println(dic1)

println(dic2)

var arr1 = [1,2,3,4,5]
var arr2 = arr1
println(arr1)
println(arr2)
// arr1과 arr2가 출력한 내용은 같습니다.
// arr2 0번 요소 제거
arr2.removeAtIndex(0)
println(arr1)
println(arr2)
// arr1과 arr2는 다른 결과를 출력하기 때문에 Array형도 Dictionary형처럼 복사하는 것입니다.

let arr3 = [1,2,3,4,5]
let dic3 = [1:1, 2:4, 3:9, 4:16]
arr3.append(6) // 변경할 수 없음
dic3.removeAtIndex(0) // 변경할 수 없음

dic3[5] = 25
dic3[1] = nil

[/swift]

Facebook Comments

카테고리:   Swift Books

댓글

죄송하지만 댓글은 닫혀 있습니다.