2016-12-26 3 views
0

Я только начал мигрировать некоторый Swift кода к Swift 3. Форматирование для цветовых констант изменились сПочему UIColor.white, красный, зеленый и синий не работают, но все остальные цветовые константы работают нормально?

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

Большинства коды моего проекта был мигрирующим над просто отлично, используя этот новый синтаксис. Однако некоторые цветовые константы UIColor не работают: UIColor.white, UIColor.red, UIColor.green и UIColor.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, green и blue свойства, которые представляют цвета красного, зеленого и синего, возник конфликт.

Для тех, у кого есть аналогичная проблема: убедитесь, что у вас есть какие-либо расширения, которые вызывают проблему.

Swift 2 Extension

// 
// 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 Расширение

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

} 
Смежные вопросы