Cin*_*316 2 uicolor ios swift swift3
我刚刚开始将一些Swift代码迁移到Swift 3.颜色常量的格式已经改变了
let color = UIColor.yellowColor() // Swift 2
let color = UIColor.yellow // Swift 3
Run Code Online (Sandbox Code Playgroud)
我的项目代码的大部分代码都使用这种新语法进行了很好的迁移.然而,一些颜色的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
Run Code Online (Sandbox Code Playgroud)
它给出了以下错误:
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'
Run Code Online (Sandbox Code Playgroud)
现在最后一个错误很有意义; 没有颜色常数被称为fakeColor.但这表明编译器正在看到故障的颜色常数,因为它给出了不同的错误.
根据Apple的文档,确实存在故障的颜色常数.为什么我的编译器不能看到它们?
更新:我发现了这个问题.
我对UIColor进行了扩展,使其更加快速.它允许访问RGB组件,如下所示.现在UIColor具有red,green和blue表示红色,绿色和蓝色的属性,存在冲突.
对于遇到类似问题的其他人:确保检查是否有任何导致问题的扩展.
Swift 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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2382 次 |
| 最近记录: |