IOS- 21

김정현·2023년 3월 28일
0

IOS 개발공부 일지

목록 보기
21/27

where

where 절은 특정 패턴과 결합하여 조건을 추가하는 역할을 한다.
크게 두 가지 용도로 활용된다.

  • 패턴과 결합하여 조건 추가
  • 타입에 대한 제약 추가
. (스위치문)
.
case let (x, y) where x == y: print("x == y")       // where 절을 사용해 조건 추가

옵셔널 패턴과도 결합이 가능하다.

.
.
for case let number? in ABC where number > 2 {
	print("Found a \(number)")
}

타입캐스팅 패턴과도 결합이 가능하다.

. (스위치문)
.
case let value where value is Int: print("value is Int")

표현 패턴과도 결합이 가능하다.

.(스위치문)
.
case (-2, -2, -2....2) where point.0 != 1: print("(\(point.o), \(point.1))은 원점과 가깝습니다.")

프로토콜 익스텐션 where 절

프로토콜 익스텐션에 where절을 사용하면 이 익스텐션이 특정 프로토콜을 준수하는 타입에만 적용될 수 있도록 제약을 줄 수 있다.
즉, 익스텐션이 적용된 프로토콜을 준수하는 타입 중 where 절 뒤에 제시되는 프로토콜도 준수하는 타입만 익스텐션을 적용하게 하는 것이다.

.
.
extension Selfprintable where Self: FixedWidthInteger, Self: , SignedInteger {      //FixedWidthInteger, SignedInteger도 준수하는 타입만 익스텐션 적용
.
.
.
}

제네릭 함수의 반환타입 뒤에 where절을 포함하면 타입 매개변수와 연관 타입에 요구사항을 추가할 수도 있다. 이러한 요구사항은 타입 매개변수가 특정 클래스를 상속 받았는지 또는 특정 프로토콜을 준수하는지를 표현 할 수 있다.

func prints<T, U>(first: T second: U) where T: CustomStringConvertible, U: CustomStringConvertible {  
	. //타입 매개변수 T와 U가 프로토콜을 준수하는 타입
    .
}


protocol Container {
		associatedtype ItemType where ItmeType: BinaryInteger     //프로토콜 연관타입에 타입 제약을 줌
        .
        .
        .
}

0개의 댓글