2016-04-27 28 views
5

Jak powinienem wywołać następującą metodę? Metoda należy do klasy, która drukuje logi.Jak wywołać metodę z parametrami CVaListPointer w Swift

func log(format: String!, withParameters valist: CVaListPointer) 

Co chcę osiągnąć, będzie wyglądać tak w Objective-C:

NSLog(@"Message %@ - %@", param1, param2); 

jakieś pomysły?

Odpowiedz

10

CVaListPointer jest Swift odpowiednik C va_list typu i może być utworzony z szeregu [CVarArgType] stosując withVaList().

przykład:

func log(format: String!, withParameters valist: CVaListPointer) { 
    NSLogv(format, valist) 
} 

let args: [CVarArgType] = [ "foo", 12, 34.56 ] 
withVaList(args) { log("%@ %ld %f", withParameters: $0) } 

wyjściowa:

 
2016-04-27 21:02:54.364 prog[6125:2476685] foo 12 34.560000 

Na Swift 3 wymienić CVarArgType przez CVarArg.

+0

Co możesz polecić do funkcji, która pobiera 'CVarArg' zamiast' CVaListPointer'? – kelin

+0

Jeśli zastąpisz 'CVarArgType' przez' CVarArg', kompilator pokaże błąd z powodu typu, a jeśli spróbujesz rzucić 'CVarArg' na' CVarArgType', dostaniesz awarię. – kelin