관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] deprecated 자동완성 fix 버튼 제공하기 (renamed) 본문

iOS 응용 (swift)

[iOS - swift] deprecated 자동완성 fix 버튼 제공하기 (renamed)

jake-kim 2025. 2. 5. 01:56

deprecated 옵션 기초 개념

  • 만약 새로운 함수가 필요하여 기존에 사용하던 함수는 deprecated되었다는 의미를 개발자에게 주고 싶은 경우 아래처럼 @availble(*, deprecated)를 사용하여 알려주는 방법이 존재
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        deprecatedFunc()
        deprecatedFunc2()
    }
    
    @available(*, deprecated)
    func deprecatedFunc() {
    }
    
    @available(*, deprecated, message: "새로운 A 함수를 사용하세요")
    func deprecatedFunc2() {
    }
}

  • 이렇게 되면 개발자는 단지 메세지만 볼 수 있을 뿐, 직접 message를 보고 어떤 함수를 사용해야할지 결정해야하는 번거로움이 존재
  • 조금 더 직관적으로 개발자에게 새로운함수를 쓸 수 있도록 유도하려면 컴파일 타임에 fix버튼을 주어서 버튼만 누르면 알아서 수정되는 방법이 더욱 좋음

fix 버튼 제공하기 "renamed"

  • @available(*, deprecated, renamed:) 매크로를 사용하면 fix버튼을 손쉽게 제공이 가능
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        myOldFunc()
    }
    
    @available(*, deprecated, renamed: "myNewFunc") // <-
    func myOldFunc() {
        // ...
    }
    
    func myNewFunc() {
        // ...
    }
}

Xcode화면)

  • 만약 파라미터 이름이 바뀐다면?
    • renamed에 애플에서 사용하는 *단축 함수 표기명을 사용하면 반영됨
  • *단축 함수 표기명
    • 콜론을 제외하고 메서드 시그니쳐 형태로 사용하는 것

ex) 

func myOldFunc(oldParam: Int) {} // myOldFunc(oldParam:)
func myOldFunc2(oldParam: Int, oldParam2: String) {} // myOldFunc(oldParam:oldParam2:)
  • 만약 파라미터명이 oldParam에서 newParam으로 바뀌었다면 renamed에 아래처럼 작성
@available(*, deprecated, renamed: "myNewFunc(newParam:)")
func myOldFunc(oldParam: Int) {
}

func myNewFunc(newParam: Int) {
}

결과

주의) 파라미터가 한 개만 되고, 두 개 이상은 동작안되므로 주의

Comments