用CFStringTransform和Swift 3模糊地使用'init'
在尝试构buildBonMot的示例项目时,
let theCFMutableString = NSMutableString(string: myString) as CFMutableString CFStringTransform(theCFMutableString, UnsafeMutablePointer<CFRange>(nil), kCFStringTransformToUnicodeName, false)
我在CFStringTransform
行上得到这个错误
Ambiguous use of 'init'
Xcode 8项目使用Swift 3
在Swift 2中,指针types符合NilLiteralConvertible
,允许一个非可选的指针types来表示一个空指针。 所以当你这样做的时候
UnsafeMutablePointer<CFRange>(nil)
编译器实际上是使用init(_ other: COpaquePointer)
的init(_ other: COpaquePointer)
初始化UnsafeMutablePointer
,因为COpaquePointer
是NilLiteralConvertible
,因此可以表示一个空指针。
但是在Swift 3( SE-0055 )中,指针types不再符合ExpressibleByNilLiteral
。 而不是允许一个非可选的指针types来表示一个空指针,这现在简单地用optionals来完成,其中nil
意味着一个空指针。
因此,您可以直接将nil
传递给CFStringTransform
的range
参数,因为它需要一个UnsafeMutablePointer<CFRange>!
:
CFStringTransform(theCFMutableString, nil, kCFStringTransformToUnicodeName, false)