[Swift] Strideable Protocol
2022. 10. 17. 20:18ㆍiOS/Swift
Strideable Protocol은 offset 및 측정 가능한 연속적 1차원 값을 나타내는 유형이다.
Strideable 프로토콜을 준수한다면 stride(from:to:by:), stride(from:through:by:) 메서드를 사용할 수 있다.
- stride(from:to:by:) → from ~ to 미만의 범위를 by 간격으로 반복 수행한다
- stride(from:through:by:) → from ~ through 이하의 범위를 by 간격으로 반복 수행한다
custom type에 Strideable을 채택하면 advanced(by:), distance(to:) 메서드를 추가해야한다.
enum Week: Int {
case monday = 0
case tuesday, wednesday, thursday, friday, saturday, sunday
}
Week에 Strideable 프로토콜을 채택하면
typealias Stride = ##Code##
Stride를 정의하라고 한다.
나는 Strinde를 Int로 해줬다.
이제 distance와 advanced를 정의하라고 한다.
func distance(to other: Week) -> Int {
}
func advanced(by n: Int) -> Week {
}
// Stride를 Double로 정의하면 아래처럼 나옴
func distance(to other: Week) -> Double {
}
func advanced(by n: Double) -> Week {
}
Stride에 String을 넣으면 Stride를 정의하라고 다시 나온다 ㅠ
Double은 된다.
생각해보니 String은 서로의 거리를 알 수 없네 좀 멍청했다.
extension Week: Strideable {
typealias Stride = Int
func distance(to other: Week) -> Int {
other.rawValue - self.rawValue
}
func advanced(by n: Int) -> Week {
return Week(rawValue: self.rawValue + n)!
}
}
이렇게 값을 정의해줬다.
let monday = Week.monday
let friday = Week.friday
for day in stride(from: monday, to: friday, by: 2) {
print(day)
}
// monday
// wednesday
for day in stride(from: monday, through: friday, by: 2) {
print(day)
}
// monday
// wednesday
// friday
오옹
mondayd와 friday는 몇 일 차이날까?
print(monday.distance(to: friday)) // 4
to: 라서 미만을 알려주는가보다.
monday에서 3을 더하면 무슨 요일일까?
print(monday.advanced(by: 3)) // thursday
체스게임 만드는 과제 하다가 알게된 프로토콜이였는데 겁나 유용했었다.
다른 곳 어딘가에도 쓸 일이 있지않을까🫣
'iOS > Swift' 카테고리의 다른 글
[Swift] 화면 캡쳐 감지 및 방지하기 (3) | 2023.05.07 |
---|---|
[Swift] 뷰의 특정 모서리에 round 처리하기 + border (0) | 2022.03.10 |
[graphQL] custom scalar를 사용하기 위해 먼저 해야 할 것 (0) | 2022.02.18 |
[Swift] UILabel에서 attributedText를 활용한 들여쓰기와 내어쓰기 (1) | 2021.04.08 |
[Swift] Check Appstore receipts validation (1) | 2021.02.19 |