Как быстро вызвать функцию objective c с аргументами

У меня есть следующая функция в цели c

+ (NSString *)getNsLog:(NSString *)pString, ...{
    va_list args;
    va_start(args, pString);
    NSLogv(pString, args);
    va_end(args);

    return [[NSString alloc] initWithFormat:pString arguments:args]; 
}

как я могу вызвать эту функцию из swift или преобразовать код в быстрый, чтобы при вызове функции могло быть:

getNslog("my value1 =  %@ value2 = %@","hello","world")

Обратите внимание, что у второго параметра нет псевдонима, как это.

getNslog("my value1 =  %@ value2 = %@", args:"hello","world")

person Noe Miranda Franco    schedule 18.06.2015    source источник
comment
Возможный дубликат Как вы называете Objective- C вариативным методом от Swift?. - Резюме: вы не можете вызывать функцию со списком переменных аргументов из Swift, только функции, принимающие параметр va_list.   -  person Martin R    schedule 18.06.2015


Ответы (2)


Я решил следовать:

в цели c измените мой код на это:

+(NSString*)getNsLog:(NSString*)pString args:(va_list)args{

NSLogv(pString, args);

va_end(args);

return [[NSString alloc] initWithFormat:pString arguments:args];
}

в быстром делегате приложения я добавляю

extension MyClass {
class func getNsLog(format: String, _ args: CVarArgType...) -> NSString?
    {
    return MyClass.getNsLog(format, args:getVaList(args))
    }
}

теперь я могу вызвать функцию

NSLog("%@", MyClass.getNsLog("%@,%@", "hello","World")!)

Я основал в сообщении дублированный Как вы звоните вариативный метод Objective-C от Swift?

Благодарю.

person Noe Miranda Franco    schedule 18.06.2015

  1. Просто импортируйте свой класс, содержащий этот метод, в YourProjectname-Bridging-Header.h файл.

     #import "`YourClass.h"
    
  2. Создать объект импортированного класса

     var a = YourClass()
    
  3. затем просто вызовите метод и передайте требуемый параметр

    a.getNsLog(yourParameters)
    

надеюсь, это поможет

person iAnurag    schedule 18.06.2015
comment
Я делаю это, но только эта функция не распознается - person Noe Miranda Franco; 18.06.2015