본문 바로가기
FRONT-END/iOS

자바스크립트와 비교하며 Swift 공부하기 - 컬렉션, Array편

by 랄라J 2023. 7. 8.

Swift의 컬렉션

  • 데이터를 효율적으로 관리하기 위한 자료형
  • Array, Dictionary, Set이 있음
    • Array vs Set -> 주로 Array를 사용함. 단, 여러 데이터를 중복 저장할 필요가 없을 때 Array 대신 Set을 사용하기도 함
  • Swift 5.2에서 KeyValuePairs가 추가됨
    • Dictionary와 유사한 형태이지만, 배열처럼 순서가 있는 컬렉션

 

컬렉션 관련 용어

- Copy-On-Write 최적화 : 코드상에서 값을 복사해서 담는다 하더라도, 실제 값이 바뀌기 전까지는 하나의 메모리 값을 공유해서 사용하는 것 (메모리를 적게 차지하기 위해 Swift 내부에서 알아서 처리하는 매커니즘)

 

Array

// Swift 배열 표기 방법
// 정식 표기 방법
let numArray: Array<String> =  [1, 2, 3]

// 단축 문법
let numArray: [String] = [1, 2, 3]
  • 순서대로 저장하는 컬렉션
  • Swift의 배열에는 동일한 타입의 데이터만을 담을 수 있음

 

Swift 빈 배열 생성

var emptyArray0: [Int] = []
var emptyArray1 = Array<Int>()
var emptyArray2 = [Int]()

 

배열 기본 기능

  Swift Javascript
배열 카운트 array.count array.length
빈배열 확인 array.isEmpty 별도로 존재하지 않음, 카운트 활용
arr.length === 0
!arr.length
요소 포함 여부 확인 array.contains(1) array.includes(1)
랜덤한 요소 추출 array.randomElement() 별도로 존재하지 않음, Math 활용
items[Math.floor(Math.random()*items.length)]
요소 변경 array.swapAt(1, 2) 별도로 존재하지 않음, 구조분해할당 활용
[arr[1], arr[2]] = [arr[2], arr[1]]
특정 순서 배열 요소 추출 // 옵셔널 타입, 빈 배열이면 nil return
array.first
array.last
별도로 존재하지 않음, 카운트 활용
index 추출 array.startIndex
array.endIndex // 배열 메모리의 끝 주소
array.firstIndex
array.lastIndex
array.lastIndexOf(1)
요소 삽입 array.insert(3, at: 0)
array.insert(contentsOf: [3, 4], at: 0)
array += [3]
array.append(4)
array.append(contentsOf: [3, 4])
array.unshift()
array.push()
요소 교체 array.replace[0] = 9
array.replace[0...2] = [0, 1, 2]
array.replace[0...2] = []
array.replaceSubrange(0...1, with: [0,1])
 
요소 삭제 array[0...1] = []
array.remove(at: 1)
array.removeSubrange(0...1)
array.removeFirst()
array.removeFirst(2) // 앞에서부터 2개
array.removeLast()
array.removeAll()
array.removeAll(keepingCapacity: true)
array.shift()
array.pop()
array.slice()
배열 정렬 array.sort()
array.sorted() // 정렬된 배열 리턴
array.reverse()
array.reversed()
array.shuffle()
array.shuffled()
array.sort()
array.toSorted()
array.reverse()
array.toReversed()
등등..
  • swift는 배열 비교 가능하나, 자바스크립트는 참조값이 비교되어 배열 비교 불가함

 

Swift emumerated

  • 열거된 것들을 Named Tuple 형태로 반환
let array = ["a", "b"]

for tuple in array.enumerated() {
    print(tuple) // (offset: 0, element: "a") (offset: 1, element: "b")
    print("\(tuple.0) - \(tuple.1)")
}

for (idx, word) in array.enumerated() {
	print(idx) // 0 1
	print(word) // a b
}

 

배열 관련 용어

  • 서브스크립트 문법: []를 이용한 문법 -> 배열 특정 인덱스 접근 시 배열[]에서 []를 의미
728x90

댓글