2016-12-26 5 views
0

Ich habe gerade begonnen, einige Swift Code über Swift 3. Die Formatierung für Farbkonstanten hat die Migration geändert vonWarum funktionieren UIColor.white, rot, grün und blau nicht, aber alle anderen Farbkonstanten funktionieren gut?

let color = UIColor.yellowColor() // Swift 2 
let color = UIColor.yellow // Swift 3 

Die meisten Code mein Projekt wurde gerade fein Migration über diese neue Syntax. Einige der UIColor-Farbkonstanten funktionieren jedoch nicht: UIColor.white, UIColor.red, UIColor.green und UIColor.blue. Alle anderen UIColor Konstanten, wie UIColor.yellow, funktionieren gut. Die fehlerhaften Konstanten werden in Autocomplete angezeigt, und Websites online melden, dass sie funktionieren (http://leaks.wanari.com/2016/09/26/converting-project-swift-3-0/).

Allerdings, wenn ich kompilieren die folgende Datei:

import SpriteKit 

let aColor = UIColor.black 
let aColor2 = UIColor.darkGray 
let aColor3 = UIColor.lightGray 
let aColor4 = UIColor.white 
let aColor5 = UIColor.gray 
let aColor6 = UIColor.red 
let aColor7 = UIColor.green 
let aColor8 = UIColor.blue 
let aColor9 = UIColor.cyan 
let aColor10 = UIColor.yellow 
let aColor11 = UIColor.magenta 
let aColor12 = UIColor.orange 
let aColor13 = UIColor.purple 
let aColor14 = UIColor.brown 
let aColor15 = UIColor.clear 

let aFakeColor = UIColor.fakeColor 

Es gibt die folgenden Fehler:

enter image description here

Instance member 'white' cannot be used on type 'UIColor' 
Instance member 'red' cannot be used on type 'UIColor' 
Instance member 'green' cannot be used on type 'UIColor' 
Instance member 'blue' cannot be used on type 'UIColor' 
Type 'UIColor' has no member 'fakeColor' 

nun der letzte Fehler macht durchaus Sinn; Es gibt keine Farbkonstante namens fakeColor. Aber das zeigt, dass der Compiler die fehlerhaften Farbkonstanten sieht, da es einen anderen Fehler gibt.

Gemäß Apple's documentation existieren die fehlerhaften Farbkonstanten. Warum kann mein Compiler sie nicht sehen?

+3

Haben Sie sauber Ihr Projekt versucht, und die Linien neu zu schreiben, die das Problem verursachen. Können Sie das Projekt erstellen? – Starlord

+0

@Joakim Nur das Projekt gereinigt, und es gibt immer noch die gleichen Fehler, wenn ich baue. Noch mehr Ideen? – Cin316

+0

Dies ist für einen Strohhalm greifen, aber ich würde vielleicht versuchen, UIKit direkt importieren, wenn Sie nicht bereits haben. –

Antwort

4

Update: Ich habe das Problem gefunden.

Ich hatte eine Erweiterung zu UIColor, die es mehr Swifty machte. Es erlaubt den Zugriff auf die RGB-Komponenten wie unten gezeigt. Jetzt, da UIColor red, green und blue Eigenschaften aufweist, die die Farben rot, grün und blau darstellen, gab es einen Konflikt.

Für alle anderen, die ein ähnliches Problem haben: Überprüfen Sie, ob Sie Erweiterungen haben, die das Problem verursachen.

Swift 2 Erweiterung

// 
// UIColor+Swifty.swift 
// 
// Created by Cin316 on 3/6/16. 
// Usage is permitted under the MIT license. 
// This does not work in Swift 3.0 ! 
// 

import SpriteKit 

public extension UIColor { 

    public var alpha: CGFloat? { 
     get { 
      var a: CGFloat = 0 
      if (self.getWhite(nil, alpha: &a)) { 
       return a 
      } else { 
       return nil 
      } 
     } 
    } 

    public var white: CGFloat? { 
     get { 
      var w: CGFloat = 0 
      if (self.getWhite(&w, alpha: nil)) { 
       return w 
      } else { 
       return nil 
      } 
     } 
    } 

    public var red: CGFloat? { 
     get { 
      var r: CGFloat = 0 
      if (self.getRed(&r, green: nil, blue: nil, alpha: nil)) { 
       return r 
      } else { 
       return nil 
      } 
     } 
    } 
    public var green: CGFloat? { 
     get { 
      var g: CGFloat = 0 
      if (self.getRed(nil, green: &g, blue: nil, alpha: nil)) { 
       return g 
      } else { 
       return nil 
      } 
     } 
    } 
    public var blue: CGFloat? { 
     get { 
      var b: CGFloat = 0 
      if (self.getRed(nil, green: nil, blue: &b, alpha: nil)) { 
       return b 
      } else { 
       return nil 
      } 
     } 
    } 

    public var hue: CGFloat? { 
     get { 
      var h: CGFloat = 0 
      if (self.getHue(&h, saturation: nil, brightness: nil, alpha: nil)) { 
       return h 
      } else { 
       return nil 
      } 
     } 
    } 
    public var saturation: CGFloat? { 
     get { 
      var s: CGFloat = 0 
      if (self.getHue(nil, saturation: &s, brightness: nil, alpha: nil)) { 
       return s 
      } else { 
       return nil 
      } 
     } 
    } 
    public var brightness: CGFloat? { 
     get { 
      var b: CGFloat = 0 
      if (self.getHue(nil, saturation: nil, brightness: &b, alpha: nil)) { 
       return b 
      } else { 
       return nil 
      } 
     } 
    } 

} 

Swift 3 Erweiterung

// 
// UIColor+Swifty.swift 
// 
// Created by Cin316 on 3/6/16. 
// Usage is permitted under the MIT license. 
// Notice the addition of "Comp" to conflicting properties. 
// 

import SpriteKit 

public extension UIColor { 

    public var alphaComp: CGFloat? { 
     get { 
      var a: CGFloat = 0 
      if (self.getWhite(nil, alpha: &a)) { 
       return a 
      } else { 
       return nil 
      } 
     } 
    } 

    public var whiteComp: CGFloat? { 
     get { 
      var w: CGFloat = 0 
      if (self.getWhite(&w, alpha: nil)) { 
       return w 
      } else { 
       return nil 
      } 
     } 
    } 

    public var redComp: CGFloat? { 
     get { 
      var r: CGFloat = 0 
      if (self.getRed(&r, green: nil, blue: nil, alpha: nil)) { 
       return r 
      } else { 
       return nil 
      } 
     } 
    } 
    public var greenComp: CGFloat? { 
     get { 
      var g: CGFloat = 0 
      if (self.getRed(nil, green: &g, blue: nil, alpha: nil)) { 
       return g 
      } else { 
       return nil 
      } 
     } 
    } 
    public var blueComp: CGFloat? { 
     get { 
      var b: CGFloat = 0 
      if (self.getRed(nil, green: nil, blue: &b, alpha: nil)) { 
       return b 
      } else { 
       return nil 
      } 
     } 
    } 

    public var hue: CGFloat? { 
     get { 
      var h: CGFloat = 0 
      if (self.getHue(&h, saturation: nil, brightness: nil, alpha: nil)) { 
       return h 
      } else { 
       return nil 
      } 
     } 
    } 
    public var saturation: CGFloat? { 
     get { 
      var s: CGFloat = 0 
      if (self.getHue(nil, saturation: &s, brightness: nil, alpha: nil)) { 
       return s 
      } else { 
       return nil 
      } 
     } 
    } 
    public var brightness: CGFloat? { 
     get { 
      var b: CGFloat = 0 
      if (self.getHue(nil, saturation: nil, brightness: &b, alpha: nil)) { 
       return b 
      } else { 
       return nil 
      } 
     } 
    } 

} 
Verwandte Themen