[iOS] Method cannot be marked @objc because the type of the parameter 5 cannot be represented in Objective-C
2025. 1. 10. 23:21ㆍiOS
반응형
이 오류는 Swift에서 특정 메서드를 Objective-C에서 사용할 수 있도록 @objc로 표시하려고 할 때 발생하며, 해당 메서드의 매개변수 타입 중 하나가 Objective-C에서 표현될 수 없는 경우 발생합니다. Objective-C에서 사용할 수 없는 타입에는 다음이 포함됩니다:
- Swift 전용 타입 (e.g., Tuple, enum(raw value가 없는 경우), struct 등)
- 제네릭 타입
- 클로저 또는 함수 타입
문제 해결 방법
- 매개변수 타입 확인
- 메서드의 매개변수 타입을 확인하고, Objective-C와 호환되지 않는 타입이 있는지 찾습니다.
- Objective-C 호환 타입으로 변경
- Objective-C와 호환되지 않는 매개변수 타입을 변경하거나, 해당 타입을 Objective-C에서 사용할 수 있도록 변환합니다.
- 일반적으로 Objective-C와 호환되는 타입:
- Int, Float, Double
- NSString, NSNumber
- NSArray, NSDictionary
- Objective-C 클래스 (UIView, UIButton 등)
- 대안으로 Objective-C 호환 메서드 제공
- 문제가 되는 메서드 대신 Objective-C에서 사용할 수 있는 대체 메서드를 제공합니다.
예제
문제 코드
@objc func exampleMethod(param: (Int, String)) {
// Objective-C는 Tuple 타입을 지원하지 않음
}
해결 코드
Objective-C에서 사용할 수 있도록 Tuple 대신 Class나 Dictionary로 대체:
@objc func exampleMethod(param: [String: Any]) {
// Dictionary는 Objective-C와 호환됨
}
클로저 사용 문제
@objc func exampleMethod(callback: (String) -> Void) {
// Objective-C는 클로저를 지원하지 않음
}
Objective-C에서 사용할 수 있도록 @escaping 클로저를 제거하거나 Selector로 대체:
@objc func exampleMethod(target: Any, action: Selector) {
// Selector는 Objective-C와 호환됨
}
추가 디버깅 팁
- Objective-C 호환성을 확인하기 위해 메서드와 타입에 @objc를 붙이고, Swift가 Objective-C에서 인식할 수 있는지 확인합니다.
- Swift 타입 중 Objective-C에서 사용할 수 없는 타입을 사용했다면, 클래스 또는 매개변수를 수정하여 호환되도록 변경하세요.
반응형
'iOS' 카테고리의 다른 글
[iOS] Keychain과 UserDefaults 병행 (0) | 2025.01.10 |
---|---|
[API] 400 Bad Request (0) | 2025.01.10 |
[API] UnexpectedRollbackException 500 Error (1) | 2025.01.10 |
[RxSwift] zip, combineLate (1) | 2025.01.09 |
[RxSwift] Button rx.tap (2) | 2025.01.09 |