2016-04-27 139 views
5

我應該如何調用以下方法?該方法屬於打印日誌的類。如何在Swift中使用CVaListPointer參數調用方法

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

我想達到的目標,應該是這樣的使用Objective-C:

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

任何想法?

回答

10

CVaListPointer是 的C va_list類型的夫特等效,並且可以從使用withVaList()一個[CVarArgType]陣列來創建。

實施例:

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

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

輸出:

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

對於夫特3,通過CVarArg替換CVarArgType

+0

你可以推薦一個函數,它使用'CVarArg'而不是'CVaListPointer'? – kelin

+0

如果用'CVarArg'替換'CVarArgType',編譯器會因爲類型而顯示錯誤,並且如果您嘗試將'CVarArg'強制轉換爲'CVarArgType',則會導致崩潰。 – kelin

相關問題