@available(*, unavailable)

lyoodong·2023년 11월 9일

@availabl 키워드는 특정 플랫폼, Swift 버전, OS 버전 등의 제약을 걸 수 있다. unavailableintroduced , deprecatedobsoletedmessagerenamed와 같은 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 어노테이션을 통해, 해당 코드를 사용할 수 없음을 명시하면 다음과 같은 이점이 있다.

  1. 개발자가 실수로 스토리보드나 XIB를 사용하여 이 뷰를 인스턴스화하지 못하도록 방지
  2. 뷰가 코드를 통해서만 생성되어야 한다는 것을 명확하게 합니다.
  3. 컴파일 타임에 init(coder:)의 사용을 방지하여, 런타임 에러가 발생하는 것보다 일찍 문제를 감지할 수 있습니다.

0개의 댓글