Swift 5 : 배열과 딕셔너리(Array and Dictionary)

budlebee·2020년 7월 16일
0

배열(Array)

배열의 리터럴 선언은 다음과 같다.

var 변수명: [타입] = [값1, 값2, 값3, ...]

기본적으로 Swift 는 하나의 배열에 하나의 타입만 들어간다.

배열을 섞으려면 shuffled() 메소드를 사용하고, 배열내 항목에 무작위로 접근하려면 randomElement() 메소드를 사용한다.

배열에 항목 추가는 append 메소드 또는 + 연산자를 사용한다.
배열의 항목 제거는 remove(at:) 메소드를 이용한다. 가장 마지막 항목을 삭제하려면 removeLast() 메소드를 이용한다.

var test: [String] = ["one","two","three"]
test += ["four"]
test.remove(at:1) // test = ["one","three","four"]
test.removeLast() // test = ["one","three"]

여러 타입이 혼합된 배열 생성하기

배열선언시 Any 키워드를 사용한다.

var mixedArray: [Any] = [1, 2.0, "three"]

Any 키워드로 선언시 배열 내 요소를 사용할때 에러가 생기지 않게 주의해야 한다.
다음은 에러가 발생하는 코드이다.

var mixedArray: [Any] = [1, 2.0, "three"]
for element in mixedArray {
	print(element * 10)
}

Any 타입과 Int 타입의 곱셈 연산이 불가능 하기 때문이다. 배열의 요소를 Int 타입으로 다운캐스팅 해보면 다음과 같다.

var mixedArray: [Any] = [1, 2.0, "three"]
for element in mixedArray {
	print(element as! Int * 10)
}

위 코드를 실행할 경우 콘솔에 10은 뜨지만, 그 다음부터 에러가 생긴다. Float 타입인 2.0을 Int 로 다운캐스팅 했기때문에 생기는 오류이다. Any 타입을 사용할시 배열 내부 각 항목의 타입을 식별할 로직이 필요하다.

딕셔너리(Dictionary)

딕셔너리는 키-값 형태로 데이터가 저장된다. 키로 쓸수 있는 타입은 String, Int, Double, Bool 뿐이다.
특정 딕셔너리 객체 안에서 키는 유일하다.
딕셔너리의 리터럴 선언은 다음과 같다.

var 변수명: [키의 타입 : 값의 타입] = [키1:값1, 키2:값2, 키3:값3, ...]

키와 값이 별개의 배열일 경우 딕셔너리의 생성

zip() 함수를 이용한다. Dictionary 객체를 호출하고, zip()이 반환하는 값을 받아줄 argument label 은 uniqueKeysWithValues 다.

let values = ["two","three","four","five"]
var dict = Dictionary(uniqueKeysWithValues: zip(2...,values))

이때 키들의 배열과 값들의 배열의 길이가 서로 다른 경우, 짧은쪽을 기준으로 딕셔너리가 생성된다. 2... 을 사용하면, values 의 길이에 맞춰 2,3,4,5 가 키로 사용된다.

딕셔너리 항목 추가와 제거

항목을 추가할때는 딕셔너리이름[추가할 키] = 추가할 값 로 적으면 되고, 항목을 제거할때는 해당하는 키에 nil 을 할당하거나 removeValue(forKey:) 메소드를 사용한다.

var testDict: [String: String]  = ["1":"one","2":"two","3":"three"]
testDict["4"] = "four"
testDict["1"] = nil
testDict.removeValue(forKey: "3")

0개의 댓글