Смешивание Swift и Objective C: использование типов Swift в Objective C

#objective-c #swift

#objective-c #swift

Вопрос:

У меня есть некоторый устаревший код в Objective C, который я не хочу переписывать в Swift, но я хочу использовать этот код в Swift.

У меня это работает нормально, но неудобно и долго выполнять преобразование между базовыми типами в Swift и Objective C. Например, вам нужно преобразовать из Int в Swift в Int32, чтобы использовать его в Objective C.

Чтобы упростить это, я рад создать дополнительные перегрузки в моем коде Objective C, которые принимают типы Swift. Это кажется проще, чем выполнять преобразование в каждом сайте вызова.

Есть ли способ использовать типы Swift в Objective C? Что-то вроде этого:

 -(void) doSomething:(Int*)theInt {
}
  

Возможно ли это?

В противном случае возможно ли создать неявный оператор приведения между двумя типами в Swift?

Любые другие предлагаемые решения?

Как и было запрошено, вот пример кода текущей ситуации.

Вот Objective C:

 @interface TestClass : NSObject 

 (void) somemethod:(int)param;

@end

@implementation TestClass

 (void) somemethod:(int)param {

}

@end
  

Вот пример вызова метода в Swift:

 let swiftInt :Int = 2
TestClass.somemethod(Int32(swiftInt))
  

Я хотел бы устранить необходимость преобразования в Int32 на каждом сайте вызова при вызове из Swift.

Комментарии:

1. Swift Int вызывается NSInteger в Objective C. Редактировать: ну, это автомосты между ними, хотя они не одного типа.

2. Можете ли вы предоставить пример кода?

3. @M_G Я добавил пример текущей ситуации в соответствии с запросом

Ответ №1:

Я изменил сигнатуру метода, чтобы использовать NSInteger вместо int, и он отлично работает без необходимости его приведения.

(void) somemethod:(int)param;

изменено на:

(void) somemethod:(NSInteger)param;