var intArray = [1, 2, 3, 4, 5, 6, 7, 8]
var intSliceArray1 = intArray[2...3]
var intSliceArray2 = intArray[0...3]
var intSliceArray3 = intArray[0...]
var intSliceArray4 = intArray[..<4]
print(intSliceArray1, intSliceArray2, intSliceArray3, intSliceArray4, separator: "\n")
/*
결과
[3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4]
*/
https://developer.apple.com/documentation/swift/arrayslice
Apple Developer Documentation
developer.apple.com
ArraySlice는 Range<Int>, 그러니까 1...2, 3..<5 이런 형식을 [] 안에 넣어서 배열의 단일 값이 아닌 범위를 액세스 하는 문법입니다
여러가지 특징이 있는데 배열을 ArraySlice로 액세스 하면 해당 타입은 Array가 아닌
Array<Int>.SubSequence
타입이 됩니다.
또한 ArraySlice는 본래의 Array를 참조하고 있는 형태이므로 새로운 메모리를 사용하지 않는 장점이 있다고 합니다
다만 참조하고 있는 상태이기 때문에 오랫동안 방치하게 되면 Memory Leak이 발생할 수 있는 단점도 있습니다
주 용도는 배열 내부 값을 비교할 때 쓰는데 저는 코딩 테스트 문제를 풀 때 많이 사용합니다
var intArray = [1, 2, 3, 4, 5, 6, 7, 8]
var intSliceArray1 = intArray[2...3]
var intSliceArray2 = intArray[0...3]
var intSliceArray3 = intArray[0...]
var intSliceArray4 = intArray[..<4]
print(intSliceArray1, intSliceArray2, intSliceArray3, intSliceArray4, separator: "\n")
/*
결과
[3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4]
*/
이런 식으로 사용할 수 있습니다
그리고 ArraySlice 타입으로 초기화 한 후 해당 타입을 사용할 때 주의사항이 있는데
print(intSliceArray1[1])
// 2...3 을 액세스 했기 때문에 Fatal error: Index out of bounds 가 발생합니다
초기화한 ArraySlice 타입은 첫 인덱스가 0이 아닌 지정한 범위의 첫 번째 값이기 때문에 잘 살펴보고 참조해야 합니다
다른 타입으로 예시를 더 써보자면...
var stringArray = ["가", "나", "다", "라", "마", "바", "사"]
var stringSliceArray1 = stringArray[2...3]
var stringSliceArray2 = stringArray[0...3]
var stringSliceArray3 = stringArray[5...]
var stringSliceArray4 = stringArray[..<stringArray.count]
print(stringSliceArray1, stringSliceArray2, stringSliceArray3, stringSliceArray4, separator: "\n")
/*
결과
["다", "라"]
["가", "나", "다", "라"]
["바", "사"]
["가", "나", "다", "라", "마", "바", "사"]
*/
let scoreArray = [3.5, 4.0, 2.0, 4.5, 3.2, 4.3]
let mid = scoreArray.count / 2
let leftArraySum = scoreArray[..<mid].reduce(0, +)
let rightArraySum = scoreArray[mid...].reduce(0, +)
/*
결과
3
9.5
12.0
*/
이런 식으로 count 접근이 가능하고, 고차함수도 사용이 가능합니다
https://github.com/500beckwon/SwiftBasic/blob/master/ArraySlice/ArraySlice/main.swift
'IOS Swift > Swift 공부 기록' 카테고리의 다른 글
UIColor 원하는 색을 편하게 사용하기 (0) | 2021.07.18 |
---|---|
코드로 NavigationController 만드는법 (0) | 2020.05.25 |
Swift) UITableViewCell에 UICollectionViewCell 넣기 (0) | 2020.04.27 |
Swift) Protocol/Get Set/ Subscript 기초 공부 (0) | 2020.04.18 |
Swift) UIStackView에 UIButton 넣기! (0) | 2020.04.16 |