안녕하세요~ 소들입니다!!
오늘은 간단한 Swift 문법에 대해 다뤄보려고 합니다
그있잖아여 for-in 반복문 돌리다 보면 보이는
0..<1
0...1
0...
이런 것들에 대해서!
또한 ~= 라는 범위 (확인?) 연산자에 대해서 다루려고 합니당
모든 포스팅은 편의 말투로 합니다~!!
1. 범위 연산자
1-1. 닫힌 범위 연산자(Closed Range Operator)
a...b
a 이상 b 이하
위처럼 시작과 끝이 정해져 있는 범위 연산자로,
그 가운에 ... (점 세개)를 표시함!!
이렇게 할 경우, 위에서 설명한대로 a 이상 b 이하의 범위가 잡힘
만약 1...5 이라는 범위를 정할 경우,
이는
이렇게 양 끝 범위인 1, 5를 포함한 범위연산자란 것!!!
1-2. 반 닫힌 범위 연산자(Half-Open Range Operator)
a..<b
a 이상 b 미만
반 닫힌 범위 연산자처럼 시작과 끝이 정해져 있는 범위 연산자로,
그 가운에 ..< 를 표시함!!
이렇게 할 경우, 위에서 설명한대로 a 이상 b 미만의 범위가 잡힘
만약 1..<5 이라는 범위를 정할 경우,
이는
보통 배열의 마지막 인덱스까지 순회할 때, 배열의 크기 -1 만큼 돌아야 하잖음?
배열은 인덱스가 0부터이기 때문에!!
따라서, 반 닫힌 범위 연산자는 배열을 다룰 때 용이 함
let array: [Int] = [1, 2, 3, 4, 5]
for index in 2..<array.count {
print(array[index]) // 3, 4, 5
}
|
요런 식으루!!
1-3. 단방향 범위(One-Side Ranges)
...a
a...
..<a
단방향 범위 연산자는 앞서 공부했던 닫힌 범위 연산자 / 반 닫힌 범위 연산자를 쓸 때
시작과 끝 범위 중 하나만 정해주는 연산자임
이건 배열로 이해하는 게 훨 쉬울듯!!
let array: [Int] = [1, 2, 3, 4, 5]
for element in array[...3] {
print(element) // 1, 2, 3, 4
}
for element in array[3...] {
print(element) // 4, 5
}
for element in array[..<3] {
print(element) // 1, 2, 3
}
|
위처럼 단방향으로 범위를 정해준 경우,
...3 / ..<3 일 때는
배열에선 최소 범위로 지정할 수 있는 0번 째 인덱스부터 지정된 인덱스(3 or 2)까지 범위가 잡히는 거고
3... 일 때는
지정된 인덱스(3)부터 배열에서 최대 범위로 지정할 수 있는 마지막 인덱스까지 범위가 잡히는 것임!
요런 식으로!!!
왜 이아이만 배열로 예를 드냐면,
위처럼 설정할 경우,,,,,, 시작 범위가 없기 때문에
어디서부터 범위가 시작되어야 할지를 알 수가 없엉...
(배열의 경우는 무조건 0번이 시작 범위이기 때문에 가능했던 것)
.. 뭐 그에 따라서 에러가 뜸
반대로,
시작범위가 다음과 같이 양수로 정해진 경우에 단방향 범위를 쓰면
시작 범위는 잡혀서 에러가 뜨진 않지만..
끝 범위가 정해져 있지 않아, 범위 자체가 5 ~ 무한대로 잡히기 때문에,,
몇초 사이에 5785번 실행해버림;;
위처럼 사용한느 것은 미친짓입니다.. 하지마십셔,,,;;
2. ~= : 범위 안에 값이 속하는지 확인하는 연산자
~= 연산자는 범위 안에 해당 값이 속하는지 확인하는 연산자로,
리턴 값은 Bool이다
나는 생각보다 위의 연산자를 사용하는 것을 많이 본 적이 없는데,
예로 보여드리자면
let range = 1..<5
range ~= 1 // true
range ~= 5 // false
|
위처럼 쓸 수 있따
.
.
.
~=는 잘 몰랐던 연산자인데, 사용할 일이 있으면 유용할듯 합니당 :)
잘못된 내용 및 피드백 댓글 대환영!!
'iOS > Swift' 카테고리의 다른 글
Swift) 초기화(Initializers) 이해하기 (2/6) - 클래스의 초기화(Designated / Convenience) (10) | 2022.09.15 |
---|---|
Swift) 초기화(Initializers) 이해하기 (1/6) - 구조체(Struct)의 초기화 (14) | 2022.08.02 |
Swift) closure와 @escaping 이해하기 (13) | 2022.07.18 |
Swift) Metatype(.self, .Type, .Protocol) 정복하기 (2/2) (2) | 2022.02.02 |
Swift) Metatype(.self, .Type, .Protocol) 정복하기 (1/2) (7) | 2022.02.02 |