728x90
|
where절
- 2가지 용도
- 특정 패턴과 결합하여 조건 추가
- 타입에 대한 제약 추가
- 특정 패턴에 Bool 타입조건을 지정하거나 어떤 타입의 특정 프로토콜 준수 조건을 추가하는 등의 기능
- 프로토콜 익스텐션에 사용하면 특정 프로토콜을 준수하는 타입에만 extension이 적용될 수 있도록 할 수 있음.
import Foundation
var array: [Int] = [1, 2, 3, 4, 5, 6, 7, 8]
//값 바인딩, 와일드 카드 패턴 (num이 5이상일 때만 블록 실행)
for num in array where num >= 5 {
print(num)
}
/*결과
5
6
7
8
*/
import Foundation
var array: [Int?] = [1, 2, 3, 4, 5, 6, 7, 8]
//옵셔널 패턴과 결합
for case let num? in array where num >= 5 {
print(num)
}
/*결과
5
6
7
8
*/
import Foundation
let anyValue: Any = "aBC"
//타입 캐스팅 패턴과 결합
switch anyValue {
case let value where value is String:
print("value is string")
case let value where value is Int:
print("value is Int")
default:
print("anyValue")
}
/*결과
value is string
*/
import Foundation
protocol Printable {
func printSelf()
}
//protocol, extension과 결합
extension Printable where Self: Numeric {
func printSelf() {
print("Number Printable")
}
}
extension Printable {
func printSelf() {
print("others")
}
}
extension Int: Printable {}
extension String: Printable {}
let integer: Int = 12
let string: String = "wow"
integer.printSelf()
string.printSelf()
/*결과
Number Printable
others
*/
728x90
'Swift' 카테고리의 다른 글
[Swift] class 키워드 vs static 키워드 (0) | 2021.06.02 |
---|---|
[Swift] ARC (Auto Reference Counting) (0) | 2021.05.31 |
[Swift] inout 파라미터 (0) | 2021.05.28 |
[Swift] 제네릭 (Generics) (0) | 2021.05.28 |
[Swift] 이니셜라이저 (Initializer) (0) | 2021.05.28 |
댓글