推荐什么?
下面的示例只是一个示例函数,该函数从红色,绿色和蓝色值返回UIColor,而无需将数字除以255。代码是用Swift 5编写的。
例如:
struct colorFrom {
func RGB(r: CGFloat, g: CGFloat, b: CGFloat) -> UIColor {
var red, green, blue, alpha: CGFloat
red = r / 255
green = g / 255
blue = b / 255
alpha = 1
var color: UIColor
color = UIColor(red: red, green: green, blue: blue, alpha: alpha)
return color
}
}
extension UIColor {
func RGB(r: CGFloat, g: CGFloat, b: CGFloat) -> UIColor {
var red, green, blue, alpha: CGFloat
red = r / 255
green = g / 255
blue = b / 255
alpha = 1
var color: UIColor
color = UIColor(red: red, green: green, blue: blue, alpha: alpha)
return color
}
}
colorFrom().RGB(r: 153, g: 153, b: 153)
UIColor().RGB(r: 153, g: 153, b: 153)
答案 0 :(得分:2)
苹果公司没有任何官方顾问在权衡这两种设计选择AFAIK之间的区别。
话虽这么说,UIColor
扩展中的便捷初始化程序或静态方法很有意义。但不是实例方法,而是static
方法。
但是考虑到通常将RGB值表示为0.0到1.0之间的值,我很可能会得出这样的事实:您期望参数标签和快速帮助,例如:
extension UIColor {
/// Initializes and returns a color object using the specified RGB component values represented as
/// values between 0 and 255 (rather than between the customary 0.0 to 1.0).
///
/// - Parameters:
/// - red: Value between 0 and 255.
/// - green: value between 0 and 255.
/// - blue: Value between 0 and 255.
convenience init(eightBitRed red: CGFloat, green: CGFloat, blue: CGFloat) {
self.init(red: red/255, green: green/255, blue: blue/255, alpha: 1)
}
}
然后您可以执行以下操作:
let plum = UIColor(eightBitRed: 148, green: 33, blue: 147)
仅为此一种方法定制的struct
(同样,如果您这样做的话,它将是static
方法),也可能没有任何意义。如果您有一堆在struct
内进行逻辑分组的方法,那么您可以考虑一下。但是根据提供的信息,我不会为此创建单独的结构。 (而且,如果您要创建struct
,则struct
的名称应以大写字母开头。)