(1, 2)
의 구조는 콤마로 구분된 두 요소의 목록입니다. 패턴은 특정값이 아닌 값의 구조를 나타내기 때문에 다양한 값과 일치 시킬 수 있습니다. 예를 들어 패턴 (x, y)
은 튜플 (1, 2)
와 다른 두 요소 튜플과 일치합니다. 패턴을 값과 일치시키는 것 외에도 복합 값의 일부 또는 전체를 추출하고 각 부분을 상수 또는 변수 이름으로 바인드 할 수 있습니다.switch
구문의 케이스 라벨, do
구문의 catch
절, 또는 if
, while
, guard
, 또는 for
-in
구문의 케이스 조건에서 이 패턴을 사용합니다.GRAMMAR OF A PATTERN pattern → wildcard-pattern type-annotationpattern → identifier-pattern type-annotationpattern → value-binding-pattern pattern → tuple-pattern type-annotationpattern → enum-case-pattern pattern → optional-pattern pattern → type-casting-pattern pattern → expression-pattern
_
) 로 구성됩니다. 일치하는 값에 대해 신경쓰지 않을 경우에 와일드 카드 패턴을 사용합니다. 예를 들어 다음의 코드는 닫긴 범위 1...3
을 반복하고 루프의 각 반복의 범위의 현재값을 무시합니다:GRAMMAR OF A WILDCARD PATTERN wildcard-pattern →_
someValue
는 타입 Int
의 42
값이 일치하는 식별자 패턴입니다:42
는 상수 이름 someValue
에 바인드 (할당) 됩니다.let
키워드로 시작합니다; 변수의 이름에 바인드 하면 var
키워드로 시작합니다.let
은 튜플 패턴 (x, y)
에서 각 식별자 패턴에 배포합니다. 이 동작으로 인해 switch
케이스 case let (x, y):
와 case (let x, let y):
은 동일한 값과 일치합니다.let (x, y): (Int, Int) = (1, 2)
에서 튜플 패턴 (x, y): (Int, Int)
은 두 요소 모두 타입 Int
의 튜플 타입만 일치합니다.for
-in
구문 또는 변수 또는 상수 선언에서 패턴으로 사용되면 와일드 카드 패턴, 식별자 패턴, 옵셔널 패턴, 또는 이를 포함하는 다른 튜플 패턴만 포함할 수 있습니다. 예를 들어 튜플 패턴 (x, 0)
에서 요소 0
은 표현식 패턴이므로 다음의 코드는 유효하지 않습니다:GRAMMAR OF A TUPLE PATTERN tuple-pattern →(
tuple-pattern-element-list)
tuple-pattern-element-list → tuple-pattern-element | tuple-pattern-element,
tuple-pattern-element-list tuple-pattern-element → pattern | identifier:
pattern
switch
구문 케이스 라벨과 if
, while
, guard
, 그리고 for
-in
구문의 케이스 조건에서 나타납니다.switch
구문을 사용하는 예제는 연관된 값 (Associated Values) 을 참고 바랍니다.Optional
은 열거형으로 구현되므로 .none
과 .some
은 열거형 타입의 케이스로 동일한 switch 에 나타날 수 있습니다.GRAMMAR OF AN ENUMERATION CASE PATTERN enum-case-pattern → type-identifier.
enum-case-name tuple-pattern
Optional<Wrapped>
열거형의 some(Wrapped)
케이스에 래핑된 값과 일치합니다. 옵셔널 패턴은 식별자 패턴과 물음표 바로 뒤에 오는 것으로 구성되며 열거형 케이스 패턴과 동일한 위치에 나타납니다.Optional
열거형 케이스 패턴에 대한 구문 설탕 이므로 다음은 동일합니다:for
-in
구문에서 옵셔널 값의 배열을 반복하는 편리한 방법을 제공하여 nil
이 아닌 요소에 대해서만 루프의 바디를 실행합니다.is
패턴과 as
패턴 두가지가 있습니다. is
패턴은 switch
구문 케이스 라벨에서만 나타납니다. is
와 as
패턴은 다음의 형식을 가집니다:is
패턴은 런타임 시 해당 값의 타입이 is
패턴의 오른편에 지정한 타입과 일치하거나 해당 타입의 하위클래스가 일치하면 값으로 일치됩니다. is
패턴은 타입 캐스트를 동작하지만 반환된 타입을 버린다는 것에서 is
연산자와 유사하게 동작합니다.as
패턴은 런타임 시 해당 값의 타입이 as
패턴의 오른편에 지정한 타입과 일치하거나 해당 타입의 하위클래스가 일치하면 값으로 일치합니다. 일치가 성공하면 일치된 값의 타입은 as
패턴의 오른편에 지정한 패턴 (pattern) 으로 캐스팅 됩니다.is
와 as
패턴으로 값을 일치 시키기 위해 switch
구문을 사용하는 예제는 Any 와 AnyObject 에 대한 타입 캐스팅 (Type Casting for Any and AnyObject) 을 참고 바랍니다.GRAMMAR OF A TYPE CASTING PATTERN type-casting-pattern → is-pattern | as-pattern is-pattern →is
type as-pattern → patternas
type
switch
구문 케이스 라벨에서만 나타납니다.~=
연산자를 사용하여 입력 표현식의 값과 비교합니다. ~=
연산자가 true
를 반환하면 일치는 성공합니다. 기본적으로 ~=
연산자는 ==
연산자를 사용하여 동일한 타입의 두 값을 비교합니다. 다음 예제에서 보듯이 범위내에 값이 포함되는지 검사하기 위해 값의 범위로 값을 일치시킬 수도 있습니다.~=
연산자를 오버로드 할 수 있습니다. 예를 들어 포인트의 문자열 표현으로 point
표현식을 비교하기 위해 위의 예제를 다시 작성할 수 있습니다.