Initialisateur Swift UIColor – Erreur du compilateur uniquement lors du ciblage de l'iPhone5s

La situation:

Travailler à partir d'un nouveau projet: iOS> Application> Jeu> SpriteKit, Swift, iPhone

Ici, j'ai écrit une fonction dans mon GameScene.swift pour accepter une valeur de couleur hex et alpha double. Je vais par la documentation de Swift, et reference à une solution élégante que j'ai vu en ligne. J'ai remarqué que ce code exact comstack, fonctionne et affiche la bonne couleur pour une cible de construction de l' iPhone5 dans le simulateur.

Mais…

Le même projet ne comstackra même pas lorsque ma cible de construction est définie pour iPhone5s .

l'erreur du compilateur

Impossible de find une surcharge pour 'init' qui accepte les arguments fournis.

La fonction:

 // colorize function takes HEX and Alpha converts then returns aUIColor object func colorize (hex: Int, alpha: Double = 1.0) -> UIColor { let red = Double((hex & 0xFF0000) >> 16) / 255.0 let green = Double((hex & 0xFF00) >> 8) / 255.0 let blue = Double((hex & 0xFF)) / 255.0 var color: UIColor = UIColor( red: Float(red), green: Float(green), blue: Float(blue), alpha:Float(alpha) ) return color } 

L'appel associé dans didMoveToView :

 override func didMoveToView(view: SKView) { // blue background color self.backgroundColor = colorize( 0x003342, alpha:1.0) } 

Certes, je suis très nouveau pour le développement iOS, mais je me request ce qui se passe pour que le compilateur ne trouve pas cet initialiseur?

EDIT: mettre en place un github momentanément

Un aperçu rapide des files associés … le seul que j'ai édité est GameScene.swift

Cela a probablement à voir avec une discordance entre Float et Double. Fondamentalement, si les arguments sont supposés être CGFloats, vous devez passer CGFloats.

 let color = UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(alpha)) 

Ce qu'il est important de comprendre ici, c'est que CGFloat est défini comme Float sur les plates-forms 32 bits et Double sur les plates-forms 64 bits. Donc, si vous utilisez explicitement Floats, Swift n'aura pas de problème avec cela sur les plates-forms 32 bits, mais produira une erreur sur 64 bits.

Voir à partir du code source, vous devez utiliser CGFloat au lieu de Float

entrez la description de l'image ici

cela devrait fonctionner

 func colorize (hex: Int, alpha: Double = 1.0) -> UIColor { let red = Double((hex & 0xFF0000) >> 16) / 255.0 let green = Double((hex & 0xFF00) >> 8) / 255.0 let blue = Double((hex & 0xFF)) / 255.0 var color: UIColor = UIColor( red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha:CGFloat(alpha) ) return color }