2017-04-15 76 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) 
相关问题