안녕하세요.
이번엔 Swift의 @available 속성에 대해서 알아볼게요.
available 속성을 사용하면 특정 Swift 버전이나 특정 플랫폼 및 os 버전과 관련된 선언 lifecycle을 나타낼 수 있어요.
## Arguments
available은 2개 이상의 인자가 필요해요.
인자는 다음 중 하나의 플랫폼 또는 언어 이름으로 시작합니다.
- iOS
- iOSApplicationExtension
- macOS
- macOSApplicationExtension
- macCatalyst
- macCatalystApplicationExtension
- watchOS
- watchOSApplicationExtension
- tvOS
- tvOSApplicationExtension
- visionOS
- swift
모든 플랫폼 대상으로 선언하고 싶으면 asterisk(*)를 사용해도 괜찮아요.
[주의] Swift 인자를 사용한 available 속성에서는 asterisk(*)를 사용할 수 없습니다.
나머지 인자들은 순서에 상관없이 조합해서 쓸 수 있어요.
나머지 인자들에 대해 알아볼게요.
### unavailable
선언한 플랫폼에서 사용할 수 없음을 나타냅니다.
[주의] Swift 인자를 사용한 availability 속성에선 이 인자를 사용할 수 없습니다.
위처럼 선언하면 iOS 플랫폼에선 MyClass 클래스를 사용할 수 없고 컴파일 에러가 발생합니다.
### introduced
클래스나 method가 처음으로 도입된 플랫폼 또는 Swift 버전을 의미합니다.
버전 정보는 점(.)으로 구분된 1~3개 0 이상의 정수로 구성됩니다. (ex. 16.0.1)
위처럼 선언하면 MyClass가 iOS 17.0.0부터 도입되었다는 것을 의미하기 때문에 17.0.0 이하도 지원하는 프로젝트의 경우 아래와 같은 컴파일 에러가 발생하기 때문에 'if #available' 구문으로 분기처리를 해줘야 합니다.
introduced 인자만 사용하고 여러 플랫폼을 지원하는 경우, 아래처럼 생략해서 사용할 수도 있어요.
### deprecated
deprecated 되었을 때 사용하는 인자입니다.
버전 정보는 입력할 수도 있고 생략할 수도 있습니다.
(언제부터 deprecated 되었는지에 대한 정보를 제공하고 싶지 않을 때 버전 정보를 생략합니다.)
deprecated 인자를 사용하면 위처럼 경고 메시지가 나옵니다.
### obsoleted
선언(클래스, 구조체, method 등)이 특정 플랫폼 또는 Swift 버전에서 처음으로 폐기되었을 때 사용합니다.
위처럼 폐기되었다고 선언하면 컴파일 에러가 발생합니다.
### message
deprecated 되었거나 obsoleted 된 선언들에 대해서 컴파일러가 경고나 에러를 출력할 때 보여줄 메시지입니다.
### renamed
선언명이 변경되었을 때 어떤 명칭으로 변경되었는지 표시할 때 사용합니다.
예를 들어서 최초에 MyProtocol로 배포를 했는데
나중에 MyProtocol -> MyRenamedProtocol로 이름이 바뀐 경우, typealias와 함께 사용해서 컴파일러에서 경고 또는 에러 메시지와 함께 자동완성될 수 있도록 활용할 수 있어요.
## 기타
특정 플랫폼 가용성과 swift 버전은 같이 지정할 수 없어요.
이럴 땐 아래처럼 available 속성을 2번 사용하면 됩니다.
# 참고
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/attributes/#available
이번 글은 여기서 마무리.
'Swift' 카테고리의 다른 글
구조체(value type) 생성자에 대해 알아보자 (0) | 2024.01.17 |
---|---|
private(set) (0) | 2024.01.17 |
@testable (0) | 2023.11.21 |
Dictionary Enum.rawValue subscript (0) | 2023.08.08 |
Opaque and Boxed Types (0) | 2023.07.01 |