본문 바로가기
🍎 Swift/iOS 학습 노트

[Swift 🍎] @objc

by 솔비님 2024. 7. 22.
아직까지 애플의 프레임워크는 Objective-C 언어로 작성된 코드가 많다
따라서 호환성을 위해 @objc 표기가 필요하다

 

@objc 사용에 대한 기준이 궁금해서 찾아본 내용!

 


애플의 공식 문서 확인

애플의 공식 문서에서는 API가 Objective-C에서 온 것인지 확인할 수 있다
Swift API의 경우 "Swift"로 표시되며, Objective-C API는 "Objective-C"로 표시된다

 

 

API 이름과 타입 확인

Objective-C API는 클래스 이름에 NS 로 시작하는 경우가 많다
예시) NSString, NSArray, NSDate, NSTimer 등
UIKit의 클래스들은 UI 접두사를 사용한다
예시) UIView, UIViewController, UIButton 등

 

 

메서드 시그니처와 셀렉터 사용 여부 확인

셀렉터를 사용하는 메서드는 보통 Objective-C 기반이다
예시) perform(_:with:afterDelay:), addTarget(_:action:for:), Timer.scheduledTimer(timeInterval:target:selector:userInfo:repeats:)

 

 

어노테이션 확인

애플의 API 설명서에서 Objective-C와 Swift 호환성을 나타내는 @objc 속성이 사용된 경우

 

 


@objc 사용 예시 :)

 

NSTimer (현재 Swift에서는 Timer)

Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerFired), userInfo: nil, repeats: true)

@objc func timerFired() {
    // 타이머가 작동할 때 실행되는 코드
}

 

 

UIKit의 제스처 인식기

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
view.addGestureRecognizer(tapGestureRecognizer)

@objc func handleTap() {
    // 탭 제스처가 인식될 때 실행되는 코드
}

 

 

NSNotificationCenter (현재 Swift에서는 NotificationCenter)

NotificationCenter.default.addObserver(self, selector: #selector(handleNotification), name: NSNotification.Name(rawValue: "MyNotification"), object: nil)

@objc func handleNotification() {
    // 알림을 받았을 때 실행되는 코드
}

 

 

UIButton의 addTarget 메서드

let button = UIButton()
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)

@objc func buttonTapped() {
    // 버튼이 눌렸을 때 실행되는 코드
}