2016-04-27 6 views
5

में CVaListPointer पैरामीटर के साथ विधि का आह्वान कैसे करें I निम्नलिखित विधि का उपयोग कैसे करना चाहिए? विधि एक वर्ग से संबंधित है जो लॉग प्रिंट करता है।स्विफ्ट

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

कोई भी विचार:

func log(format: String!, withParameters valist: CVaListPointer) 
ऑब्जेक्टिव-सी में इस प्रकार दिखाई देगा

मैं क्या हासिल करना चाहते हैं?

उत्तर

10

CVaListPointer सी 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) } 

आउटपुट: स्विफ्ट 3,

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

लिए CVarArg द्वारा CVarArgType बदलें।

+0

'CVaListPointer' के बजाय' CVarArg' लेने वाले फ़ंक्शन के लिए आप क्या अनुशंसा कर सकते हैं? – kelin

+0

यदि 'CVarArgType' को 'CVarArg' द्वारा प्रतिस्थापित किया गया है, तो कंपाइलर प्रकार की वजह से एक त्रुटि दिखाएगा, और यदि आप' CVarArg' को 'CVarArgType' पर डालने का प्रयास करते हैं, तो आपको एक क्रैश मिलेगा। – kelin