Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

swift

swift3

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?

like image 769
Lim Thye Chean Avatar asked Aug 16 '16 13:08

Lim Thye Chean


1 Answers

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.

like image 78
vacawama Avatar answered Oct 15 '22 12:10

vacawama