본문 바로가기
Swift

[Swift] where절

by Sky Titan 2021. 5. 31.
728x90
스위프트 프로그래밍
국내도서
저자 : 야곰
출판 : 한빛미디어 2019.10.01
상세보기

where절

  • 2가지 용도
    1. 특정 패턴과 결합하여 조건 추가
    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

댓글