Lim Thye Chean Lim Thye Chean - 1 year ago 162
Swift Question

Converting Swift array to CFArray in Xcode 8 (Swift 3)

This no longer works in Xcode 8 beta 6:

let colors:CFArray = [fromColor.cgColor, toColor.cgColor]


or

let gradient:CGGradient = CGGradient(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors:[fromColor.cgColor, toColor.cgColor], locations:[0.0, 1.0])!


The error is: Contextual type 'CFArray' cannot be used with array literal

What's the latest way to convert from array to CFArray?

Answer Source

It works if you add the cast as CFArray:

let colors = [fromColor.cgColor, toColor.cgColor] as CFArray

or you can add the cast in a call:

let gradient = CGGradient(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors:[fromColor.cgColor, toColor.cgColor] as CFArray, locations:[0.0, 1.0])!

In Swift 3 (Xcode 8 beta 6), implicit casting to bridged types has been removed. In some cases, like this one, you will need to add explicit casting to make it work.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download