2016-09-17 23 views
2

當試圖建立的BonMot示例項目「初始化」的,曖昧使用與CFStringTransform和斯威夫特3

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

我得到這個錯誤在CFStringTransform

Ambiguous use of 'init' 

Xcode的8項目使用Swift 3

+0

現在正在爲你的一切嗎?如果您仍然看到最新版本的問題,請提交[BonMot](https://github.com/Raizlabs/BonMot/issues)的錯誤。然而,根據你發佈的日期,我猜你已經在BonSpecialGenerator.swift中遇到了這個問題,後來更新到了Swift 3,並且自從BonMot 4.0以來根本不存在。 –

回答

3

在Swift 2中,指針類型符合NilLiteralConvertible,允許非可選指針類型表示空指針之三。因此,當你做了

UnsafeMutablePointer<CFRange>(nil) 

編譯器實際上是使用init(_ other: COpaquePointer)初始化劑UnsafeMutablePointer,爲COpaquePointerNilLiteralConvertible,因此可以代表一個空指針。

但是在Swift 3(SE-0055)中,指針類型不再符合ExpressibleByNilLiteral。而不是允許一個非可選的指針類型來表示一個空指針,這現在簡單地用可選項來完成,其中nil意味着一個空指針。

因此你可以通過nil直接進入CFStringTransformrange參數,因爲它需要一個UnsafeMutablePointer<CFRange>!

CFStringTransform(theCFMutableString, nil, kCFStringTransformToUnicodeName, false)