【问题标题】:how to pass a swift Array as UnsafePointer<T> argument in a function如何在函数中将快速数组作为 UnsafePointer<T> 参数传递
【发布时间】:2015-12-26 19:58:42
【问题描述】:

我读到,为了将 swift 变量/常量传递给期望 UnsafePointer 的参数,可以通过使用变量/常量前缀的“inout”(与号)符号来完成。 因此,在下面的代码中,我想将“颜色”数组作为“UnsafePointer”传递给函数 CGGradientCreateWithColorComponents(),但出现编译器错误:

"& 与 UnsafePointer 类型的非 inout 参数一起使用"

请参见下图以了解视觉效果。

那么,问题是,如何将 swift 数组 'colors' 转换为 UnsafePointer?

谢谢

【问题讨论】:

    标签: arrays swift unsafe-pointers


    【解决方案1】:

    将您的颜色类型明确更改为[CGFloat]

    var colors : [CGFloat] = [0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0]
    

    无需处理&amp; 或任何东西。但是你实际上必须传入一个CGFloat 的数组。

    不要传入NULL,而是nil

    let gradient = CGGradientCreateWithColorComponents(baseSpace, colors, nil, 2)
    

    【讨论】:

    • 您好,我明确地将颜色声明为 CGFloat 数组,但我得到了,尽管错误消息不同,但仍然与传递错误参数类型相关的消息:“无法将类型 '()' 的值转换为预期参数类型 'UnsafePointer'"
    • @malena 嗯,这次是什么错误?出于某种原因,我的 Playground 编译得很好
    • @malena 啊,是的,忘记那个 - NULL 是问题
    • 没有回答问题:如何将数组传递给 UnsafePointer
    • 它只是工作!谢谢!
    【解决方案2】:

    斯威夫特 3

    struct GradientPoint {
      var location: CGFloat
      var color: UIColor
    }
    
    gradientPoints.flatMap { $0.color.cgColor.components }.flatMap { $0 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2012-12-16
      相关资源
      最近更新 更多