Swift中的UIColor扩展错误

3

我有这个扩展程序:

extension UIColor {
    func rgba(r: Int, g: Int, b: Int, a: Float) -> UIColor {
        return UIColor(red: r/255, green: g/255, blue: b/255, alpha: a)
    }    
}

我遇到了一个错误信息:在调用中有额外的参数 'green'

我不明白为什么会出现这种情况,可能是Xcode 6 beta 4或Swift中的一个错误。


2
可能是重复的问题:Swift UIColor初始化器 - 仅在针对iPhone5s时编译错误 - (所有参数必须转换为CGFloat)。 - Martin R
r/255.0 g/255.0 b/255.0 - akashivskyy
@MartinR 我已经尝试过了,没有用。不过还是谢谢你的负评。 - Arbitur
2
@Arbitur:我认为这是同样的问题:你必须明确地将整数转换为CGFloat。Swift错误消息仍然可能会误导或在发布之间发生变化。(顺便说一下,我没有对你的问题进行投票。) - Martin R
顺便说一句,这不应该是类函数吗,而不是需要现有颜色实例? - Matt Gibson
显示剩余3条评论
3个回答

8

这是因为您传递的所有参数类型都不正确:r/255,g/255,b/255 是整数,而a是浮点数,但UIColor的init方法接受4个CGFloat参数。

请将代码修改为:

func rgba(r: Int, g: Int, b: Int, a: Float) -> UIColor {
    let floatRed = CGFloat(r) / 255.0
    let floatGreen = CGFloat(g) / 255.0
    let floatBlue = CGFloat(b) / 255.0
    return UIColor(red: floatRed, green: floatGreen, blue: floatBlue, alpha: CGFloat(a))
}

3
extension UIColor {
    convenience init(r: Int, g:Int , b:Int , a: Int) {
        self.init(red: CGFloat(r)/255, green: CGFloat(g)/255, blue: CGFloat(b)/255, alpha: CGFloat(a)/255)
    }
}
let myColor = UIColor(r: 255 , g: 255, b: 255, a: 255)

1

试试这个:

extension UIColor {
    class func rgba(r: Int, g: Int, b: Int, a: Float) -> UIColor {
        return UIColor(red: r/255, green: g/255, blue: b/255, alpha: a)
    }     
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接