안녕하세요 🎵 Lody 입니다. 오늘은 @available, @available(*, unavailable), #available 에 대해 정리해보겠습니다
@available
@available 은 Swift 프로그래밍 언어에서 제공되는 기능입니다. 이 어노테이션은 Swift 언어의 일부로, Swift의 표준 라이브러리에 포함되어 있습니다.
주로 Apple의 플랫폼들, 즉 iOS, macOS, watchOS, tvOS 등에서 사용됩니다. 다양한 버전의 운영체제에서 실행되는 어플리케이션의 호환성을 관리할 때 @available 어노테이션을 활용할 수 있습니다.
@available 을 통해 개발자는 특정 클래스, 메서드, 프로퍼티 등이 특정 버전의 OS에서 사용 가능한지 여부를 명시할 수 있습니다.
가령 iPadOS 의 도입과 함께 생겨난 SceneDelegate의 경우 iOS 13 이상에서만 사용할 수 있습니다.
SceneDelegate를 사용하는데, Deployment 최소 타깃이 iOS 12 이하이면 ... 빌드시에 어떻게 될까요?
iOS 12 버전 이하에서는 SceneDelegate의 개념 자체가 존재하지 않으니 당연히 에러가 발생합니다.
이런 경우에 @available을 이용할 수 있습니다.
아래와 같이 iOS13 이상에서만 SceneDelegate를 사용할꺼예요 ~! 라고 상단에 명시해준다면, 빌드가 잘 됩니다.
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
// 생략
}
이 처럼 @available 어노테이션은 API의 버전관리와 조건부 코드실행에 활용할 수 있습니다.
@available(*, unavailable) 외 기타 옵션들
앞에서 특정 버전에서 이용가능하다는 것을 명시하기 위해 @available 어노테이션을 사용했습니다. 반대로 특정 버전에서는 사용 불가능함을 명시하기 위해 사용하는 것이 @available(*, unavailable) 입니다.
@available 은 unavailable 뿐만 아니라 다양한 옵션을 통해 특정 API의 사용 가능성을 세밀하게 제어할 수 있습니다. 이 옵션들은 API 가 특정 버전에서 도입되었거나 사용이 중단되었음을 나타내거나, 특정 플랫폼에서 사용할 수 없음을 명시하는 데 사용됩니다. 각 각을 아래 표로 정리해보았습니다 ~!
옵션 | 설명 |
unavailable | 이 옵션은 해당 기능이 더 이상 사용할 수 없음을 나타냅니다. 특정 플랫폼 또는 버전에서 API가 사용 불가능하다는 것을 명시할 때 사용됩니다. |
introduced | 특정 버전에서 API가 도입되었음을 나타냅니다. 이를 통해 개발자는 API가 처음 사용 가능해진 버전을 지정할 수 있습니다. |
deprecated | API가 더 이상 권장되지 않음을 나타냅니다. 이 옵션은 특정 버전부터 API 사용을 권장하지 않지만 아직 사용할 수 있음을 의미합니다. |
obsoleted | 이 옵션은 API가 특정 버전에서 완전히 사용 중단되었음을 나타냅니다. 이는 deprecated 보다 강력한 옵션으로, API가 더 이상 작동하지 않음을 의미합니다. |
message | API가 deprecated 또는 obsoleted인 경우, 이 옵션을 사용하여 개발자에게 추가 정보나 대체 권장 사항을 제공할 수 있습니다. |
renamed | API의 이름이 변경되었음을 나타냅니다. 이 옵션은 개발자가 사용하려는 API가 새로운 이름으로 변경되었을 때 유용합니다. |
다음과 같이 사용할 수 있습니다.
@available(iOS, introduced: 9.0, deprecated: 10.0, obsoleted: 11.0, renamed: "새로운 메서드 이름", message: "새로운 메서드를 대신 사용하세용")
func 레거시한_메서드() {
// 메서드 구현부
}
#available
#available 은 조건문 분기가 가능합니다.
if #available(iOS 13, *) {
// 13 이상 버전 코드
}
else {
// 13 미만 버전 코드
}
부록) @ 과 # 의 차이점 알기
@available과 #available을 알아보았습니다.
@와 #를 구분할 수 있어야합니다.
@ 기호는 Swift Attribute를 나타냅니다. 이는 클래스, 메서드, 속성 등에 추가 정보를 제공하는 선언입니다. 선언부 상당에 명시해줄 수 있습니다. Swift Attribute 컴파일러에게 추가적인 지시를 제공하며, 코드의 실행 방식에 영향을 줄 수 있습니다.
반면 # 기호는 컴파일러 지시문(compiler directives)을 나타냅니다.
Swift의 컴파일러 지시문은 코드의 특정 부분이 특정 조건에서만 컴파일 되거나 실행되도록 지시합니다. Swift 컴파일러에 의해 내부적으로 처리됩니다. 런타임이나 컴파일 시의 조건을 기반으로 동작합니다. 예를 들어 #available은 특정 OS버전에서 코드가 실행되는지 확인합니다.
주의!!! Swift의 컴파일러 지시문과 다른 프로그래밍 언어의 전처리기 지시문은 다른 개념을 지니고 있습니다. 이 차이점을 명확하게 이해할 필요가 있습니다.
참고:
https://eunjin3786.tistory.com/323
https://developer.apple.com/documentation/xcode/running-code-on-a-specific-version
'iOS와 그 외 > Swift' 카테고리의 다른 글
[Swift] 메타타입(Metatype) 이란? (0) | 2024.01.28 |
---|---|
[Swift] Attribute - @discardableResult (0) | 2024.01.28 |
[Swift] GCD와 친해지기 (2) | 2024.01.25 |
[Swift] 더 나은 swift를 위하여 swift-evolution (0) | 2024.01.07 |
[Swift] JSON응답에서 날짜 문자열을 Date 타입으로 디코딩하기 (0) | 2023.11.28 |