我在标签上涂上颜色,发现我们有两个功能做同样的事情。 谁能解释一下这两个函数需要什么,为什么我们不能只有一个函数呢?
通常使用: -
public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
当我去UIColor课程时看到它: -
required public convenience init(colorLiteralRed red: Float, green: Float, blue: Float, alpha: Float)
这两个功能有优缺点吗?
另外,最好的方式是: -
footerView.backgroundColor = UIColor(red: 178/255, green: 178/255, blue: 178/255, alpha: 1)
footerView.backgroundColor = UIColor(colorLiteralRed: 178/255, green: 178/255, blue: 178/255, alpha: 1)
- 醇>
footerView.backgroundColor = UIColor.init(colorLiteralRed: 178/255, green: 178/255, blue: 178/255, alpha: 1)
答案 0 :(得分:3)
便利初始化器用于颜色文字(如参数标签所示)。拖放颜色时,您可以在Xcode和Playgrounds中看到它。
我没有看到任何理由自己调用颜色文字初始化程序。相反,如果您想使用显示P3色彩空间,则最有可能使用选项1或UIColor(displayP3Red:green:blue:alpha:)
。
答案 1 :(得分:1)
您可能有一个UIColor
扩展程序,它正在添加UIColor(colorLiteralRed:, green:, blue:, alpha:)
init方法。标准UIKit
方法是第一种方法。也许colorLiteralRed只需要178,178,178,而不是178 / 255,178 / 255,178 / 255? 这是错误的
你是对的 - 我的猜测colorLiteralRed
是支持Xcode中的新Color Literal
语法。尝试在Xcode中输入此内容 - let color:UIColor = Color Literal
并让自动填充功能弹出一个颜色选择器。如果您选择一种颜色,Xcode中将会有一个正方形的颜色。但是,源代码看起来像let color = #colorLiteral(red: 1.0, green: 0, blue: 0, alpha: 1)
。虽然它没有记录,但我的猜测是你在这里调用的方法。
答案 2 :(得分:0)
第一种方法
init(colorLiteralRed:green:blue:alpha:)
旨在与由开发工具管理的Color Literals一起使用。
第二种方法
init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
旨在供iOS应用用于创建颜色。
两者在性能方面都是相同的。我们不应该使用init(colorLiteralRed:green:blue:alpha:)
,因为在Swift4中,apple已弃用此方法。