'map' 生成 [T],而不是预期的上下文结果类型 'UnsafeMutablePointer<CGFloat>'

'map' produces [T], not the expected contextual result type 'UnsafeMutablePointer<CGFloat>'

我打电话给 UIBeizerPathgetLineDash 是这样的:

path.getLineDash(pattern.map{CGFloat([=13=])}, ...)

其中 pattern 是一个 [Float](而且我必须使用 [Float],而不是 [CGFloat])跟随 将其转换为 [CGFloat], 但它给了我

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

奇怪,表演

path.setLineDash(pattern.map{CGFloat([=15=])}, ...

不会引发编译错误。

问题之后,我添加了 as UnsafeMutablePointer<CGFloat> 但它仍然给我错误。

我有点傻。我没有完全理解 UnsafeMutablePointers.

基本上它们是 inout 参数,所以在函数调用之前它们需要符号 (&)。另外,因为它是 inout,所以我必须将 [CGFloat] 的变量传递给它。

此代码有效:

var pat = pattern.map{CGFloat([=10=])}
var cou = count
var phas = phase.map{CGFloat([=10=])}
path.getLineDash(&pat, count: &cou, phase: &phas)