0

我有一个NSColors 数组,还有一个 s 数组CGFloat表示梯度停止。我不知道如何使用这些数组来初始化NSGradient.

我尝试将它们制作成一个 s 数组(NSColor, CGFloat),但NSGradient(colorsAndLocations:不会接受它,因为它需要可变参数:

代码 <code>let gradient = NSGradient(colorsAndLocations: colorsAndLocations)</code> 产生错误 <code>Cannot convert value of type '[(NSColor, CGFloat)]' to expected argument type '(NSColor, CGFloat)'< /代码>

并且NSGradient(colors:, atLocations:, colorSpace:)期望一个UnsafePointer我不知道如何在 Swift 中正确处理的,如果有的话。

4

1 回答 1

1

我假设你知道这种用法:

let cAndL: [(NSColor, CGFloat)] = [(NSColor.redColor(), 0.0), (NSColor.greenColor(), 1.0)]
let gradient = NSGradient(colorsAndLocations: cAndL[0], cAndL[1])

不幸的是,Swift 没有为我们提供一种将数组赋予可变参数函数的方法。


还有第二部分。如果某些 API 声明UnsafePointer<T>为数组,您可以创建一个 T 的 Swift 数组,并将其直接传递给 API。

let colors = [NSColor.redColor(), NSColor.greenColor()]
let locations: [CGFloat] = [0.0, 1.0]
let gradient2 = NSGradient(colors: colors, atLocations: locations, colorSpace: NSColorSpace.genericRGBColorSpace())

如果你想使用Arrayof ( NSColor, CGFloat),你可以这样写:

let gradient3 = NSGradient(colors: cAndL.map{$0.0}, atLocations: cAndL.map{$0.1}, colorSpace: NSColorSpace.genericRGBColorSpace()) 
于 2016-08-03T17:41:28.587 回答