Параметры метода Objective-C в Swift

Возникли некоторые проблемы с вызовом метода, объявленного в Objective-C и подключенного к Swift. Я создал метод void рядом с рассматриваемым и могу его вызвать, поэтому я почти уверен, что это связано с тем, как мост обрабатывает параметры метода.

- (void)foo;

- (NSArray *)fetchProductHistoryForProduct:(Product *)product
                               forCustomer:(Customer *)customer
                                  forField:(Field *)field
                                  forRange:(DatePickerRange *)range
                                 inContext:(CPSPersistenceController *)context;

Затем в файле Swift я вызываю каждый следующим образом:

modelUtil.foo()

let result = modelUtil.fetchProductHistoryForProduct(product, forCustomer: nil, forField: nil, forRange: nil, inContext: nil)

Swift жалуется: «Значение типа« ModelUtil »не имеет члена« fetchProductHistoryforProduct »»

Не могли бы вы сказать мне, что я делаю неправильно?


person COSMO BAKER    schedule 05.11.2017    source источник


Ответы (2)


Вы можете увидеть сгенерированный интерфейс для целевого файла c в верхнем левом углу окна редактора. Сгенерированный интерфейс похож на заголовочный файл Swift для вашего файла ObjC, который должен сообщить вам точное имя метода. Также убедитесь, что все файлы, содержащие типы параметров, также добавлены в заголовок моста.

person rounak    schedule 05.11.2017

Вы можете использовать автодополнение Xcode, чтобы найти вызывающую последовательность. В этом случае forProduct: становится меткой для первого параметра:

let result = modelUtil.fetchProductHistory(forProduct: product, forCustomer: nil, forField: nil, forRange: nil, inContext: nil)
person vacawama    schedule 05.11.2017