2015-05-09 88 views
1

我必須在Swift中使用CFDictionaryCreate方法(documentation link)。如何傳遞UnsafeMutablePointer類型的參數<UnsafePointer <Void>>

我很難正確初始化輸入參數以便傳遞UnsafeMutablePointer<UnsafePointer<Void>>類型的參數(鍵和值)。

這裏是我的代碼:

var font_name: CFStringRef! = CFStringCreateWithCString(nil, "Courier", kCFStringEncodingASCII) 
    var font: CTFontRef! = CTFontCreateWithName(font_name, 25.0, nil) 
    var keys: [UnsafePointer<Void>] = ???? // how to intialize with "kCTFontAttributeName" 
    var values: [UnsafePointer<Void>] = ???? // how to intialize with "font" variable 
    var keyCallBacks = kCFTypeDictionaryKeyCallBacks 
    var valueCallBacks = kCFTypeDictionaryValueCallBacks 
    var font_attributes: CFDictionaryRef! = CFDictionaryCreate(kCFAllocatorDefault, &keys, &values, sizeofValue(keys), &keyCallBacks, &valueCallBacks) 
    var attr_string: CFAttributedStringRef! = CFAttributedStringCreate(nil, "hello", font_attributes) 
+0

你確定,你不能用斯威夫特字典呢?一個Swift的'[NSString:AnyObject]'字典會自動橋接到'NSDictionary'(反之亦然),'NSDictionary'是免費橋接'CFDictionary'。 - 也許你應該展示你的具體案例。 –

+0

@MartinR,我已經添加了代碼。我不確定是否可以在上面的代碼中使用NSDictionary。你能幫我一下嗎? – san

+0

你需要什麼'font_attributes'字典? –

回答

4

您可以簡單地使用[ NSString : AnyObject ]型,它是自動橋接NSDictionaryCFDictionary的斯威夫特字典。請注意,您也不需要CFStringRef

let font = CTFontCreateWithName("Courier", 25.0, nil) 
let attributes : [ NSString : AnyObject ] = [ kCTFontAttributeName : font ] 
let attrString = CFAttributedStringCreate(nil, "Hello", attributes) 

另外,

let attrString = NSAttributedString(string: "Hello", attributes: attributes) 

因爲NSAttributedString是免費電話與 CFAttributedString橋接。


只是爲了完整起見,這裏是你如何使用 CFDictionaryCreate()

let font = CTFontCreateWithName("Courier", 25.0, nil) 
var keys = [ unsafeAddressOf(kCTFontAttributeName) ] 
var values = [ unsafeAddressOf(font) ] 
var keyCallbacks = kCFTypeDictionaryKeyCallBacks 
var valueCallbacks = kCFTypeDictionaryValueCallBacks 
let attributes = CFDictionaryCreate(nil, &keys, &values, 1, &keyCallbacks, &valueCallbacks) 
let attrString = CFAttributedStringCreate(nil, "Hello", attributes) 
+0

謝謝Genius!它效果很好。只是爲了增加我的知識,任何想法如何處理UnsafeMutablePointer類型的參數>。再次感謝:) – san

+0

@san:查看更新回答:) –

相關問題