【问题标题】:'map' produces [T], not the expected contextual result type 'UnsafeMutablePointer<CGFloat>''map' 产生 [T],而不是预期的上下文结果类型 'UnsafeMutablePointer<CGFloat>'
【发布时间】:2017-04-15 12:31:17
【问题描述】:

我用这个打电话给UIBeizerPathgetLineDash

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&lt;CGFloat&gt;,但它仍然给我错误。

【问题讨论】:

  • 方法setLineDash采用UnsafePointer&lt;CGFloat&gt;,所以你可以使用map。 (虽然,在每次调用 setLineDash 时调用 map 并不是一种有效的方法。)您必须使用 [CGFloat](或手动分配的 CGFloats 区域)调用 @ 987654342@.

标签: swift cgfloat unsafemutablepointer


【解决方案1】:

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

基本上它们是inout 参数,因此在函数调用之前它们需要与符号(&amp;)。另外,由于它是 inout,我必须将变量 [CGFloat] 传递给它。

此代码有效:

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

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    相关资源
    最近更新 更多