[iOS] Method cannot be marked @objc because the type of the parameter 5 cannot be represented in Objective-C

2025. 1. 10. 23:21iOS

반응형

이 오류는 Swift에서 특정 메서드를 Objective-C에서 사용할 수 있도록 @objc로 표시하려고 할 때 발생하며, 해당 메서드의 매개변수 타입 중 하나가 Objective-C에서 표현될 수 없는 경우 발생합니다. Objective-C에서 사용할 수 없는 타입에는 다음이 포함됩니다:

  1. Swift 전용 타입 (e.g., Tuple, enum(raw value가 없는 경우), struct 등)
  2. 제네릭 타입
  3. 클로저 또는 함수 타입

문제 해결 방법

  1. 매개변수 타입 확인
    • 메서드의 매개변수 타입을 확인하고, Objective-C와 호환되지 않는 타입이 있는지 찾습니다.
  2. Objective-C 호환 타입으로 변경
    • Objective-C와 호환되지 않는 매개변수 타입을 변경하거나, 해당 타입을 Objective-C에서 사용할 수 있도록 변환합니다.
    • 일반적으로 Objective-C와 호환되는 타입:
      • Int, Float, Double
      • NSString, NSNumber
      • NSArray, NSDictionary
      • Objective-C 클래스 (UIView, UIButton 등)
  3. 대안으로 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