将自定义UIColor引入Swift项目的最佳方法是什么?
我想过两种类型的实现; 在性能,可读性和可维护性方面,您认为哪一个更好?
-
像这样创建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) }
答:扩展,以我的专业意见。
想一想; 在哲学上,你是’扩展’ UIColor
提供的颜色范围。 如果您的颜色名称是不同的,并且新function遵循Apple的方法命名协议(即
),则扩展UIColor
似乎更整洁。 一种或两种新颜色(在我看来)不保证整个专用struct
。
额外答案: struct
(或enum
!)哪里适合?
- 如果您的应用强制替换标准颜色(即自定义’主要’颜色)
- 如果您的应用程序专门设计为主题/自定义,那么可以使用
enum
,作为可用选项的具体列表。 - 如果你想不出颜色的标准名称(
sharkBlueColor
,任何人?)。 - 如果您的应用专门用于绘图/绘画(在这种情况下,“调色板”构造可能是个好主意)。
……列表还在继续。 当你成熟为Swift开发者时,你必须学会辨别和决定自己!
我为此使用枚举
enum AppColor: UInt32 { case DarkBlue = 0x00437C case LightBlue = 0x7CCEF0 var color: UIColor { return UIColor(hex: rawValue) } }
这样很容易在xib
/ storyboard
重用相同的颜色,因为我已准备好复制/粘贴的hex值。 并且还需要更少的代码来定义新颜色
为了从hex值创建颜色,我使用了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) } }
- 使用UIPresentationFormSheet,为什么我的视图不能在键盘上方移动?
- 在键盘上方移动文本字段的逻辑
- 原生VS混合应用程序开发
- 无法在Parse-Server应用程序中删除AWS-S3上的音频数据
- 如何以编程方式调整UIButton的文本大小,并保持一个很好的填充?
- UIWebView + Sharepoint + NTLM身份validation – 我得到stream是在打开之前发送一个事件
- 在ios中定义AV Player ViewController的视图帧大小
- 如何将UIImage和图像数据旋转90度
- APNS:didReceiveRemoteNotification:当app在后台时,fetchCompletionHandler没有运行(除非xcode正在调试)