@availabl 키워드는 특정 플랫폼, Swift 버전, OS 버전 등의 제약을 걸 수 있다. unavailable, introduced , deprecated, obsoleted, message, renamed와 같은 argument를 사용해 추가적인 제약을 걸 수 있다.
@available 키워드의 중요한 포인트는 컴파일 타임에 체크된다는 것이다.
class BaseView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
일반적인 BaseView의 구조에서 init(coder: NSCoder) 이니셜 라이저를 호출하게 된다면 즉, 코드베이스가 아닌 Xib 또는 Storyboard로 뷰가 초기화 된다면 런타임 에러가 발생된다.
이때, @available 어노테이션을 통해, 해당 코드를 사용할 수 없음을 명시하면 다음과 같은 이점이 있다.
init(coder:)의 사용을 방지하여, 런타임 에러가 발생하는 것보다 일찍 문제를 감지할 수 있습니다.