ios - UIColor 扩展便利初始化不起作用

标签 ios xcode swift

convenience init(red:Int,green:Int,blue:Int,alpha:CGFloat) {
    var red:   CGFloat = CGFloat(red)/255.0
    var green: CGFloat = CGFloat(green)/255.0
    var blue:  CGFloat = CGFloat(blue)/255.0
    self.init(red:red, green:green, blue:blue, alpha:alpha)
}

我编写上面的代码是为了提供一种更方便的方式来声明我的自定义 uicolor。但不知何故,它通过调用自身直到堆栈溢出使我的应用程序崩溃。这里有什么问题?

此外,我刚刚意识到我并没有明确地调用这个 init 函数。但是,当发生此错误时,我正在调用 UIColor.whiteColor()。当然,如果我显式调用这个函数,还是会报错!

最佳答案

我认为这样做没有任何不便:

let myCustomColorHSBa = UIColor(hue: 120/360, saturation: 0.25 , brightness: 1.0 , alpha: 1)
let myCustomColorRGBa = UIColor(red: 191/255, green: 1, blue: 191/255, alpha: 1)

但如果你真的需要一个,你可以这样做:

extension UIColor {
    convenience init(red: Int = 0, green: Int = 0, blue: Int = 0, opacity: Int = 255) {
        precondition(0...255 ~= red   &&
                     0...255 ~= green &&
                     0...255 ~= blue  &&
                     0...255 ~= opacity, "input range is out of range 0...255")
        self.init(red: CGFloat(red)/255, green: CGFloat(green)/255, blue: CGFloat(blue)/255, alpha: CGFloat(opacity)/255)
    }
}

UIColor(red: 255)               // r 1.0 g 0.0 b 0.0 a 1.0  (Red)
UIColor(red: 255, green: 255)   // r 1.0 g 1.0 b 0.0 a 1.0  (Yellow)
UIColor(red: 255, blue: 255)    // r 1.0 g 0.0 b 1.0 a 1.0  (Magenta)

UIColor(green: 255)             // r 0.0 g 1.0 b 0.0 a 1.0  (Green)
UIColor(green: 255, blue: 255)  // r 0.0 g 1.0 b 1.0 a 1.0  (Cyan)

UIColor(blue: 255)              // r 0.0 g 0.0 b 1.0 a 1.0  (Blue)
UIColor(red: 255, green: 192, blue: 203)  // r 1.0 g 0.753 b 0.796 a 1.0 (Pink)
UIColor(red: 255, green: 215)   // r 1.0 g 0.843 b 0.0 a 1.0 (Gold)

关于ios - UIColor 扩展便利初始化不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27735871/

相关文章:

ios - Swift 在 map 上添加注释

ios - 是否有命令从 Firebase App Distribution 获取最新版本号,就像 TestFlight latest_testflight_build_number 一样?

ios - iOS中需要将UITextField的字符输入限制为两个字符

ios - 无法从选项卡栏 Controller 访问导航栏

swift - Xcode 9.2 : linker command failed with exit code 1 (use -v to see invocation)

iphone - Interface Builder(iPhone dev)自定义按钮背景图像不考虑拉伸(stretch)设置

xcode - 使用图像作为 Sprite 角色

swift - 如何获取所有对象中某个对象是它们的属性?

ios - 代码 : How To Customize Text Field Font With My Own TTF Font?

iphone - AppDelegate 中的值未更新