'地图' 产生[T],不是预期的情境结果类型 'UnsafeMutablePointer '
问题描述:
我打电话跟这个有UIBeizerPath
的getLineDash
:'地图' 产生[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>
,但它仍然给我错误。
答
我有点愚蠢。我没有完全理解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)
参见:http://*.com/questions/39515173/how-to-use-unsafemutablepointer-in-swift-3 – shallowThought
的方法'setLineDash'需要'UnsafePointer',所以你可以使用'map'。 (但是,在每次调用'setLineDash'时,它都不是一种有效的方式来调用'map')。**必须**使用'[CGFloat]'(或手动分配的'CGFloat's)来调用'getLineDash '。 –
OOPer