Ios 将在整个应用程序或类中使用的颜色

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

我正在努力提高我的面向对象技能,我总是在争论是否需要一个类

我有一套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 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)}非常感谢您的建议。