模糊地使用' init'使用CFStringTransform和Swift 3

时间:2016-09-17 15:03:51

标签: ios swift xcode string

尝试构建BonMot的示例项目时,

let theCFMutableString = NSMutableString(string: myString) as CFMutableString
CFStringTransform(theCFMutableString, UnsafeMutablePointer<CFRange>(nil), kCFStringTransformToUnicodeName, false)

我在CFStringTransform

上收到此错误
Ambiguous use of 'init' 

Xcode 8项目使用Swift 3

1 个答案:

答案 0 :(得分:3)

在Swift 2中,指针类型符合NilLiteralConvertible,允许非可选指针类型表示空指针。因此当你做到了

UnsafeMutablePointer<CFRange>(nil)

编译器实际上使用init(_ other: COpaquePointer)的{​​{1}}初始化,因为UnsafeMutablePointerCOpaquePointer,因此可以表示空指针。

但是在Swift 3(SE-0055)中,指针类型不再符合NilLiteralConvertible。而不是允许非可选指针类型表示空指针,现在只需使用选项来完成,其中ExpressibleByNilLiteral表示空指针。

因此,您只需将nil直接传递到nil的{​​{1}}参数,因为它需要range

CFStringTransform