Ios 将在整个应用程序或类中使用的颜色
我正在努力提高我的面向对象技能,我总是在争论是否需要一个类 我有一套UIColor,我一直在我的应用程序中不同的ViewController中使用,我最初是将它们作为常量全局添加的,如下所示Ios 将在整个应用程序或类中使用的颜色,ios,swift,oop,Ios,Swift,Oop,我正在努力提高我的面向对象技能,我总是在争论是否需要一个类 我有一套UIColor,我一直在我的应用程序中不同的ViewController中使用,我最初是将它们作为常量全局添加的,如下所示 import UIKit // Global COLORS let myBlueColor = UIColor(red: 62.0/255, green: 174.0/255, blue: 206.0/255, alpha: 1.0) // more global colors here... class
import UIKit
// Global COLORS
let myBlueColor = UIColor(red: 62.0/255, green: 174.0/255, blue: 206.0/255, alpha: 1.0)
// more global colors here...
class ViewController1{
// using my global color
myButton.layer.borderColor = myBlueColor.CGColor
}
// other viewController
import UIKit
class ViewController2{
// using my global color again
myButton2.layer.borderColor = myBlueColor.CGColor
}
但后来我决定创建一个类来强迫自己以更为导向的方式思考,就像这样
颜色类别
import Foundation
import UIKit
class Color {
var myBlueColor:UIColor{
get{
return UIColor(red: 62.0/255, green: 174.0/255, blue: 206.0/255, alpha: 1.0)
}
}
var myLightGrayColor:UIColor{
get{
return UIColor(red: 249.0/255, green: 249.0/255, blue: 249.0/255, alpha: 1.0)
}
}
var myGreenColor:UIColor{
get{
return UIColor(red: 110.0/255, green: 186.0/255, blue: 64.0/255, alpha: 1.0)
}
}
var myRedColor:UIColor{
get{
return UIColor(red: 247.0/255, green: 118.0/255, blue: 113.0/255, alpha: 1.0)
}
}
var myYellowColor:UIColor{
get{
return UIColor(red: 255.0/255, green: 190.0/255, blue: 106.0/255, alpha: 1.0)
}
}
}
视图控制器
import UIKit
class ViewController1{
private var myColor = Color()
// some other code here...
myButton.layer.borderColor = myBlueColor.CGColor
}
import UIKit
class ViewController1{
private var myColor = Color()
// some other code here...
myButton2.layer.borderColor = myBlueColor.CGColor
}
其他视图控制器
import UIKit
class ViewController1{
private var myColor = Color()
// some other code here...
myButton.layer.borderColor = myBlueColor.CGColor
}
import UIKit
class ViewController1{
private var myColor = Color()
// some other code here...
myButton2.layer.borderColor = myBlueColor.CGColor
}
我的面向对象方法更好吗?好的,让我重新表述一下,这是不是你用一种更面向对象的方式来做的
我不知道,但是仅仅使用getter(计算属性),我的颜色类看起来很奇怪
任何改进我的代码的建议
编辑:不是重复,因为我对改进我的面向对象的示例感兴趣,而不是知道是否可以使用globals
谢谢如果您想将颜色封装在一个类中,并且它们不会改变,那么在OOP环境中最好的方法就是使用
公共静态final
变量
(我的Swift充其量是非常生锈的,所以这可能是不正确的语法,但应该很清楚。)
然后,您可以在任何需要的地方使用
MyColors.blue
引用该值,这将引用单个定义的UIColor
对象。当然是个好主意,但您可能可以通过扩展UIColor并使这些所有类函数更加清晰,与内置的UIColor.whiteColor()等完全相同
您可以这样做:
extension UIColor {
class func peachColor() -> UIColor {
return UIColor(colorLiteralRed: 100.00 / 100.00, green: 92.9 / 100.0, blue: 65.9 / 100.0, alpha: 1.0)
}
...
}
然后,在你的应用程序中的任何地方,你都可以说UIColor.peachColor()
,它将完美地工作。这些类扩展是一种干净的方法,它允许您避免在每个视图控制器中放置var myColor=Color()
。假设您试图用颜色对应用程序进行全局主题化,您应该查看苹果的外观API,UIAppearance
例如,要设置应用程序中所有UINavigationBars的默认颜色,请调用:
UINavigationBar.appearance().tintColor = myColor
还可以设置其他外观属性,例如背景图像
有关详细信息,请参阅:
最佳和最简单实现的可能重复哇,当我开始阅读Swift文档时,我实际上跳过了扩展部分,认为它是我永远不会使用的东西,或者至少不会经常使用,但它是一个非常酷的功能。谢谢你的提示。对于那些从未使用过扩展的人,下面是我所做的<代码>1。创建了一个新的swift文件,并将其命名为UIColor 2。添加了@爬行峰3所述的颜色功能。使用自定义颜色作为UIColor.myCustomColor()
我也非常喜欢这种方法。不过,我不认为结构中可以使用final
<代码>导入UIKit最终类颜色{static let blue:UIColor=UIColor(红色:62.0/255,绿色:174.0/255,蓝色:206.0/255,alpha:1.0)}非常感谢您的建议。