2016-12-26 49 views
0

我剛剛開始遷移一些銀行代碼交給斯威夫特3.顏色常量的格式已經從爲什麼UIColor.white,紅色,綠色和藍色不起作用,但所有其他顏色常量都能正常工作?

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

我的大部分項目的代碼已經被移植了就好使用這個新的語法改變。但是,某些UIColor顏色常量不起作用:UIColor.white,UIColor.red,UIColor.greenUIColor.blue。所有其他UIColor常量,如UIColor.yellow,工作得很好。出現故障的常量顯示在自動完成中,網站在線報告它們正常工作(http://leaks.wanari.com/2016/09/26/converting-project-swift-3-0/)。

然而,當我編譯以下文件:

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 

它提供了以下錯誤:

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' 

現在的最後一個錯誤是非常合情合理的;沒有稱爲fakeColor的顏色常數。但是這表明編譯器正在看到顏色常量錯誤,因爲它給出了一個不同的錯誤。

根據Apple's documentation,發生故障的顏色常數確實存在。爲什麼我的編譯器無法看到它們?

+3

您是否嘗試過清理項目並重寫導致問題的線路。你能建立這個項目嗎? – Starlord

+0

@Joakim剛剛清理了這個項目,並且在構建時仍然出現相同的錯誤。還有什麼想法? – Cin316

+0

這是抓稻草,但我也許會嘗試直接導入UIKit,如果你還沒有。 –

回答

4

更新:我發現了這個問題。

我對UIColor進行了擴展,使其行爲更加Swifty。它允許訪問RGB組件,如下所示。現在UIColor具有red,​​和blue屬性,它們表示紅色,綠色和藍色的顏色,但存在衝突。

對於有類似問題的其他人:確保檢查是否有任何擴展引起問題。

斯威夫特2擴展

// 
// 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 
      } 
     } 
    } 

} 

斯威夫特3擴展

// 
// 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 
      } 
     } 
    } 

} 
相關問題