본문 바로가기

비공개/공식문서 간단정리

[Swift] 배열 (Arrays)

 

 

 

배열은 순서대로 같은 타입의 값을 저장한다. 같은 값이 배열에 다른 순서로 존재 할 수 있다.

 

 

배열 타입 구문

 

swift 배열은 Array<Element> 형식으로 작성되며, 여기서 Element란 배열이 저장할 수 있는 값의 유형이다.

[Element] 로 축약된 형태로 작성할 수 있으며, 둘 모두 기능적으로는 동일하지만 축약된 형태가 더 선호된다.

var somInts: Array<Int>
var somInts: [Int]

 

 


 

빈 배열 생성

 

초기화 구문을 사용하여 타입을 포함한 빈 배열을 생성할 수 있다.

var someInts: [Int] = []
somInts.count // 0

 

someInts 변수의 타입은 초기화 타입을 통해 [Int] 로 추론된다.

var someInts: [Int] = []

someInts.append(3)
// someInts 는 이제 1개의 값(3)을 가진 배열이 되었다.

somInts = []
// someInts 는 이제 비어있는 배열이 되었다. 하지만 타입은 여전히 [Int] 이다.

 

 


 

 

기본값 배열 생성

 

같은 값을 기본 값으로 설정하고 크기를 고정하여 배열을 생성하는 초기화

적합한 타입 (파라미터 명 repeating)의 기본값과, 새로운 배열에 반복될 값의 횟수 (파라미터 명 count)를 초기화에 전달한다.

 

// Array(repeating: 기본 값, count: 갯수)

var threeDoubles = Array(repeating: 0.0, count: 3)
// threeDoubles 의 타입은 [Double]이고, 결과는 [0.0, 0.0, 0.0] 이다.
// var threeDoubles = [Double] = [0.0, 0.0, 0.0] 와 같다.

 

 


 

두 개의 배열을 더해 새로운 배열 생성

 

동등한 타입의 배열 2개를 덧셈 연산자(+)를 통해 합쳐서 새로운 배열을 만들 수 있다.

새로운 배열의 타입은 합쳐진 2개의 배열의 타입으로 부터 추론된다.

 

var threeDoubles = Array(repeating: 0.0, count: 3)
var anotherThreeDoubles = Array(repeating: 2.5, count: 3)

var sixDoubles = threeDoubles + anotherThreeDoubles
// sixDoubles 의 타입은 [Double]이고, 결과는 [0.0, 0.0, 0.0, 2.5, 2.5, 2.5] 이다.

 

 


 

배열 리터럴로 생성

 

배열 콜렉션으로 하나 이상의 값을 작성해서 배열을 생성할 수 있다.

배열 리터럴은 값을 리스트로 작성하고 콤마로 구분하며 대괄호로 둘러싸서 작성한다.

 

배열 리터럴 안의 모든 값은 같은 타입이기 때문에

Swift 가 타입 추론을 하므로 배열의 타입을 명시하지 않아도 된다.

 

// [value1, value2, value3]

// String 값을 저장하는 배열 생성
var shoppingList: [String] = ["Eggs", "Milk"]
// shoppingList은 두개의 초기 항목으로 으로 초기화 되었다.

// Swift 의 타입추론 덕에 같은 타입의 값을 포함하는 배열 리터럴로 초기화하면 
// 배열의 타입을 명시할 필요가 없다.
var shoppingList = ["Eggs", "Milk"]

 

 


 

배열의 접근과 수정

 

메서드와 프로퍼티, 또는 서브 스크립트 구문을 사용해 배열에 접근 및 수정이 가능하다.

 

 

 

.count

배열의 아이템 갯수를 알려면 읽기 전용 count 프로퍼티로 확인하면 된다.

var numberList = [1, 2]
print(numberList.count) // 2

 

 

.isEmpty

부울 isEimpty 프로퍼티를 사용해서 배열의 count 프로퍼티 값이 0인지 판단한다.

 

var numberList = [1, 2]

if numberList.isEmpty {
	print("해당 배열은 비어있습니다.")	
} else {
	print("해당 배열은 비어있지 않습니다.")	
}
// print 해당 배열은 비어있지 않습니다.

 

 

 

.append(_:)

append 메서드를 호출하여 배열의 끝에 새로운 아이템을 추가 할 수 있다.

 

var numberList = [1, 2]
numberList.append(3)
// numberList 배열에 3을 추가한다.
// 이제 numberList 는 1, 2, 3을 가진다.

 

 

 

+= ["item"]

하나 이상의 동등한 아이템의 배열을 덧셈 대입 연산자를 통해 추가 할 수 있다.

 

var numberList = [1, 2]
numberList += [3, 4, 5]

// 이제 numberList 는 1, 2, 3. 4. 5 를 가진다.

 

 

 

Array[index]

배열의 이름 바로 뒤에 대괄호를 붙이고 가져올 값의 인덱스를 넣어서 값들을 수정 할 수 있다.

 

해당 index에 있는 값 가져오기

var fruits = ["Apple", "Orange", "Grape"]

var fuitsItem = fruits[1] // "Orange"
// fruits의 1번째 index 에 있는 값을 가져온다.

 

해당 index에 존재하는 값 변경.

var fruits = ["Apple", "Orange", "Grape"]

fruits[0] = "Blueberry"
// fruits의 0 번째 index에 있는 값을 Blueberry 로 바꾼다.
// fruits ->["Blueberry", "Orange", "Grape"]

 

 

변경할 값들이 다른 범위와 다른 길이를 가지고 있더라도 서브 스크립트 구문으로 범위 안의 값을 한번에 변경 할 수 있다.

var fruits = ["Apple", "Orange", "Grape", "Lemon"]

// 1번째, 3번째 인덱스인 Orange와 Lemon 을
// Peach와 Cherry로 변경한다.
fruits[1..3] = ["Peach", "Cherry"]

 

 

.insert(_:at:)

특정 index에 아이템을 추가 할 수 있다.

var fruits = ["Apple", "Orange", "Grape", "Lemon"]

// insert(추가할 아이템, at: 인덱스)
// 0번째인 아이템 앞에 Pineapple을 추가한다.
fruits.insert("Pineapple", at: 0)
//  fruits는 ["Pineappla", "Apple", "Orange", "Grape", "Lemon"] 이 되었다.

 

 

 .remove(at:)

특정 index에 아이템을 삭제 할 수 있다.

이 메서드는 해당 index의 아이템을 삭제하고,

삭제한 아이템을 반환한다. (반환된 값이 필요한 경우)

var fruits = ["Apple", "Orange", "Grape", "Lemon"]

// remove(at: 삭제를 원하는 아이템 인덱스)
let likeFruits = fruits.remove(at: 1)

// 이제 fruits는 ["Apple", "Grape", "Lemon"] 이 되었다.
// likeFruits 에는 "Orange" 가 들어갔다.

 

 

.removeLast()

 

배열의 마지막 item 을 제거하고 싶다면 removeLast() 를 사용한다.

이 메서드는 마지막index의 아이템을 삭제하고,

삭제한 아이템을 반환한다. (반환된 값이 필요한 경우)

var fruits = ["Apple", "Orange", "Grape", "Lemon"]

let likeFruits = fruits.removeLast()

// 이제 fruits는 ["Apple", "Orange", "Grape"] 가 되었다.
// likeFruits 에는 "Lemon" 이 들어갔다.

 

 

 


 

배열의 반복

 

for-in

 

for-in 반복문을 통해서 배열 안에 있는 전체 값을 알 수 있다.

 

var fruits = ["Apple", "Orange", "Grape", "Lemon"]

for item in fruits {
	print(item)
}

// Apple
// Orange
// Grape"
// Lemon

 

 

enumerated()

각 아이템의 인덱스가 아니라 값도 필요하다면 enumerated() 메서드를 사용한다.

배열의 각 아이템에 대해 정수와 아이템을 조합하여 튜플로 반환한다.

 

var fruits = ["Apple", "Orange", "Grape", "Lemon"]
for (index, value) in fruits.enumerated() {
	print("과일 \(index + 1) : \(value)")
}

// 과일 1 : Apple
// 과일 2 : Orange
// 과일 3 : Grape
// 과일 4 : Lemon

 

 

 

'비공개 > 공식문서 간단정리' 카테고리의 다른 글

[Swift] 논리 연산자  (0) 2023.12.13
[Swift] 범위 연산자  (0) 2023.12.13
[Swift] Nil-결합 연산자  (0) 2023.12.13
[Swift] 삼항 조건 연산자  (0) 2023.12.13
[Swift] 복합 대입 연산자  (0) 2023.12.13