我想过两种类型的实现;在性能,可读性和可维护性方面,您认为其中哪一个更好?
像这样创建UIColor的扩展
extension UIColor {
class func myColor() -> UIColor {
return UIColor(red: 128/255, green: 102/255, blue: 0, alpha: 1)
}
}
创建结构:
struct Colors {
static let myColor = UIColor(red: 255/255, green: 102/255, blue: 0, alpha: 1)
}
答案 0 :(得分:13)
答案:扩展,以我的专业意见。
想一想;在哲学方面,你是在扩展' UIColor
提供的颜色范围。如果您的颜色名称不同并且新功能遵循Apple的方法命名协议(即<color name>Color
),则扩展UIColor
似乎更整洁。一种或两种新颜色(在我看来)并不保证整个专用struct
。
奖励回答:
struct
(或enum
!)在哪里适合?
enum
作为可用选项的具体列表。 sharkBlueColor
,有人吗?)。......列表还在继续。当你成熟为Swift开发者时,你必须学会辨别和决定自己!
答案 1 :(得分:1)
我使用枚举
enum AppColor: UInt32 {
case DarkBlue = 0x00437C
case LightBlue = 0x7CCEF0
var color: UIColor {
return UIColor(hex: rawValue)
}
}
这样很容易在xib
/ storyboard
中重复使用相同的颜色,因为我已准备好复制/粘贴的十六进制值。并且还需要更少的代码来定义新颜色
为了从十六进制值创建颜色,我使用了UIColor
扩展名:
extension UIColor {
public convenience init(hex: UInt32) {
let mask = 0x000000FF
let r = Int(hex >> 16) & mask
let g = Int(hex >> 8) & mask
let b = Int(hex) & mask
let red = CGFloat(r) / 255
let green = CGFloat(g) / 255
let blue = CGFloat(b) / 255
self.init(red:red, green:green, blue:blue, alpha:1)
}
}