如何传递UnsafeMutablePointertypes的参数<UnsafePointer <Void >>
我必须在Swift中使用CFDictionaryCreate
方法( 文档链接 )。
我很难正确初始化input参数,以传递UnsafeMutablePointer<UnsafePointer<Void>>
types的参数(键和值)。
这是我的代码:
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)
你可以简单地使用一个types为[ NSString : AnyObject ]
的Swift字典,它会自动桥接到NSDictionary
或CFDictionary
。 请注意,你也不需要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)