[英]How can I cast UnsafePointer<UnsafeMutablePointer<Float>>? to UnsafeMutablePointer<UnsafeMutablePointer<Float>?>!
[英]How to pass parameter of type UnsafeMutablePointer<UnsafePointer<Void>>
我必须在Swift中使用CFDictionaryCreate
方法( 文档链接 )。
我很难正确地初始化输入参数,以便传递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)
您可以简单地使用[ NSString : AnyObject ]
类型的Swift字典,该NSDictionary
将自动桥接到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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.