2016-02-13 67 views
2

我試圖提高自己的面向對象技能,並且一直在辯論是否需要類。將在整個應用程序或類中使用的顏色

我有一組我經常在不同的ViewControllers使用我的整個應用程序UIColors的,我最初將其添加爲全局常量如下開始...

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 
} 

是我的面向對象的更好的方法?好吧,讓我重述一下這個,你甚至可以用更加面向對象的方式來做這件事嗎?

我不知道,但我的顏色類看起來很奇怪,只是使用getters(計算屬性)。

任何建議,以改善我的代碼。

編輯:不是重複的,因爲我有興趣改善我的面向對象的例子,而不是知道全局變量是否可以使用。

感謝

+1

Swift中全局常量文件的可能重複(http://stackoverflow.com/questions/26252233/global-constants-file-in-swift) – 2016-02-13 03:08:02

回答

5

絕對是一個好主意,但你也許可以讓它更僅通過擴展的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()

+1

最好的和最簡單的實現 – Mihado

+0

哇,當我開始閱讀Swift文檔時,我實際上跳過了擴展部分,認爲它是我永遠不會使用的東西,或者至少不經常使用,但它是一個非常酷的功能。非常感謝小費。對於那些從未使用擴展名的用戶,以下是我所做的。 '1。創建一個新的swift文件並將其命名爲UIColor 2.添加了@creeperspeak描述的顏色函數3.使用您的自定義顏色作爲UIColor.myCustomColor()' –

1

如果你想封裝你的顏色在一個階層,他們不會改變,在一個面向對象的環境,這樣做的最好方法是使用public static final變量。

(我的雨燕是很生疏充其量所以這可能是不正確的語法,但它應該是清楚不過。)

final struct MyColors { 
    public static final blue:UIColor = UIColor(red: 62.0/255, green: 174.0/255, blue: 206.0/255, alpha: 1.0) 
    // etc 
} 

然後,您可以通過使用MyColors.blue參考價值,無論你想,這將參考到單個定義的UIColor對象。

+0

我也非常喜歡這種方法。儘管如此,我認爲'final'不能用於結構。 'import UIKit final class Colors靜態藍色:UIColor = UIColor(紅色:62.0/255,綠色:174.0/255,藍色:206.0/255,alpha:1.0) }'非常感謝您的建議。 –

1

假設您試圖用顏色在全局範圍內呈現應用程序主題,則應該查看Apple的外觀API UIAppearance

例如,設置應用中的所有UINavigationBars的默認顏色,你會打電話:

UINavigationBar.appearance().tintColor = myColor 

您還可以設置其他外觀屬性,如背景圖像

欲瞭解更多信息,請參閱:

http://nshipster.com/uiappearance/ https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAppearance_Protocol/ https://gist.github.com/mattt/5135521

+0

感謝您的提示。 –

相關問題