2017-04-15 74 views
0

我打電話跟這個有UIBeizerPathgetLineDash'地圖' 產生[T],不是預期的情境結果類型 'UnsafeMutablePointer <CGFloat>'

path.getLineDash(pattern.map{CGFloat($0)}, ...) 

pattern[Float](我必須使用[Float],不[CGFloat])以下Fast method to cast [Float] to [CGFloat]?丟給[CGFloat],但它給我

Cannot convert value of type '[CGFloat]' to expected argument type 'UnsafeMutablePointer<CGFloat>?' 

古怪,執行

path.setLineDash(pattern.map{CGFloat($0)}, ... 

不引發編譯錯誤。

正在關注this問題,我加了as UnsafeMutablePointer<CGFloat>,但它仍然給我錯誤。

+0

參見:http://stackoverflow.com/questions/39515173/how-to-use-unsafemutablepointer-in-swift-3 – shallowThought

+0

的方法'setLineDash'需要'UnsafePointer ',所以你可以使用'map'。 (但是,在每次調用'setLineDash'時,它都不是一種有效的方式來調用'map')。**必須**使用'[CGFloat]'(或手動分配的'CGFloat's)來調用'getLineDash '。 – OOPer

回答

0

我有點愚蠢。我沒有完全理解UnsafeMutablePointer

基本上它們是inout參數,所以它們在函數調用之前需要和號(&)。同樣,因爲它是inout,我必須通過一個變量[CGFloat]它。

此代碼工作:

var pat = pattern.map{CGFloat($0)} 
var cou = count 
var phas = phase.map{CGFloat($0)} 
path.getLineDash(&pat, count: &cou, phase: &phas) 
相關問題