Notice
Recent Posts
Recent Comments
Link
大器晩成
범위 연산자 (Range Operators) 본문
Swift는 값의 범위를 짧게 표현하기 위해 몇몇의 범위 연산자(Range Operators)를 포함합니다.
범위 연산자는 특정 범위를 나타낼 때 사용됩니다.
- 내림차순 형식으로 표기 불가합니다. (내림차순으로 변환은 가능합니다.)
- 실수 형식의 범위도 가능합니다. (사용하는 경우가 드묾)
- switch문에서 패턴 매칭에 사용합니다.
- for문과 주로 함께 사용합니다. (정수인 경우)
- 배열의 서브스크립트 문법과 함께 사용합니다.
1. 닫힌/폐쇄 범위 연산자(Closed Range Operator)
시작위치인 lowerbound부터 종료위치인 upperBound까지의 범위 실행을 정의합니다.
- (lowerBound...upperBound)의 형태로 범위의 시작과 끝이 있는 연산자입니다.
- lowerBound는 반드시 upperBound와 작거나 같아야 합니다. (loverBound <= upperBound)
- 한 반향은 열리도록 정의하는 것도 가능합니다. (One-Side Ranges)
let range = 1...10 //ClosedRange<Int> -> 정수 1부터 10이하
for i in range {
print(i, terminator: "") // 출력: 1,2,3,4,5,6,7,8,9, 10
}
- One-Sided 표기 시에는 숫자와 범위연산자를 붙여서 써야 합니다(빈칸 허용하지 않습니다)
내림차순 표기법
//내림차순 사용 방법
for i in (1...10).reversed() {
print(i)
}
2. 반 닫힌/폐쇄 범위 연산자(Half Open Range Operator)
- (lowerBound..<upperBound)의 형태로 종료위치인 upperBound가 포함되지 않은 시작위치 lowerBound부터 upperBound까지의 범위 실행을 정의합니다.
- 보통 컬렉션을 다룰때 많이 사용합니다.
let array: [String] = ["파이리", "꼬북이", "이상해씨", "피카츄"]
for i in 0..<array.count {
print(array[i] , terminator: " ") // 출력: 파이리, 꼬북이, 이상해씨, 피카츄
}
let rangeH = 1 ..< 10 //Range<Int> -> 1부터 10미만
3. 단 방향 범위 연산자(One-Side Ranges)
- 한방향으로 계속되는 범위에 대한 대체 형식입니다.
- One-Sided 표기 시에는 숫자와 범위연산자를 붙여서 써야 합니다 (빈칸 허용하지 않습니다.)
let array: [String] = ["파이리", "꼬북이", "이상해씨", "피카츄"]
for i in array[...2] {
print(i , terminator: " ") // 출력: 파이리, 꼬북이, 이상해씨
}
print() //줄바꿈 용도
for i in array[2...] { //PartialRangeFrom<Int> 정수 1이상 ~
print(i , terminator: " ") // 출력: 이상해씨, 피카츄
}
print() //줄바꿈 용도
for i in array[..<2] {
print(i , terminator: " ") // 출력: 파이리, 꼬북이
}
let range3 = ...10 //PartialRangeThrough<Int> 정수 10이하
print(range3.contains(10)) // 출력: ture
let rangeH1 = ..<10 //PartialRangeUpTo<Int> -> 정수 10미만까지
print(rangeH1.contains(10)) //false
# 범위연산자를 변수로 받아서 다양하게 처리하는 방법
let rangeInstance: Range<Double> = 0..<10
print(rangeInstance) // 출력: 0.0..<10.0
print(rangeInstance.contains(1.5)) // 출력: true
print(rangeInstance.lowerBound) // 출력: 0.0
print(rangeInstance.upperBound) // 출력: 10.0
4. ~= (패턴매칭) 연산자
- ~= 대상이 특정 범위에 속하는지 범위를 체크하는 연산자입니다.
- (a...b ~= age) 오른쪽에 있는 표현식이 왼쪽의 범위에 포함되는지에 따라 참과 거짓을 리턴합니다
let rangeInstance: ClosedRange<Int> = 0...10
if rangeInstance ~= 2 {
print("2 in \(rangeInstance)") // 출력: 2 in 0...10
}
let rangeOfString = "a"..."z"
if rangeOfString ~= "k" {
print("k in \(rangeOfString)") // 출력: k in a...z
}
# (1 <= n <= 10) 이런 문장은 스위프트에서 성립되지 않는다.
var n = 5
if n >= 1 && n <= 10 {
print("10이상, 10이하입니다.")
} // 출력: 1이상, 10이하입니다.
if 1...10 ~= n { //패턴매칭연산자 활용
print("1이상, 10이하입니다.")
} // 출력: 1이상, 10이하입니다.
#switch문의 케이스에서 사용
(스위치문은 내부적으로 패턴매칭 연산자로 구현이 되어있음)
var age = 18 // 범위를 나열
switch age {
case 10...19:
print("10대 입니다.")
case 20...29:
print("20대 입니다.")
case 30...39:
print("30대 입니다.")
default:
print("그 외의 범위 입니다.")
}
// 출력: 10대 입니다.
let point = (1, 2)
switch point {
case (0, 0):
print("(0, 0)은 원점 위에 있다.")
case (-2...2, -2...2):
print("(\(point.0), \(point.1))은 원점의 주위에 있다.")
default:
print("점은 (\(point.0), \(point.1))에 위치한다.")
}
// 출력: (1,2)는 원점의 주의에 있다.
#컴파일 내부 구조
if 1..10 ~= age {
}
#컴파일 시 아래처럼 구성된다.
if (1 <= age) && (age <= 10) {
}
// ~=(패턴 매칭연산자를 사용하려면 "==, <=" 연산자를 당연히 먼저 만족해야함.)
5. 참고사항
- 중요하지 않으나, 읽기 목적으로 알아 두면 좋음.
# Closed Range Operator
1 ... 10 (정수 1부터 10 이하) // ClosedRange<Int>
1... (정수 1 이상) // PartialRangeFrom<Int>
...10 (정수 10 이하) // PartialRangeThrough<Int>
# Half-Open Range Operator
1..<10 (정수 1부터 10 미만) // Range<Int>
..<10 (정수 10 미만) // PartialRangeUpTo<Int>
728x90
'iOS > Swift 문법' 카테고리의 다른 글
조건문(switch) (3) | 2024.11.01 |
---|---|
조건문(If문) (0) | 2024.10.31 |
기본 연산자 (Basic operators) (2) | 2024.10.31 |
타입 에일리어스(Type Alias) (0) | 2024.10.31 |
변수와 타입 (2) | 2024.10.31 |