2016-03-29 4 views
7

私は2つのタイプの実装を考えました。パフォーマンス、可読性、保守性の面でどちらが優れていますか?SwiftプロジェクトにカスタムUIColorを導入する最も良い方法は何ですか?

  1. 構造を作成し、この

    extension UIColor { 
        class func myColor() -> UIColor { 
         return UIColor(red: 128/255, green: 102/255, blue: 0, alpha: 1) 
        } 
    } 
    
  2. ようUIColorの拡張を作成します。

    struct Colors { 
        static let myColor = UIColor(red: 255/255, green: 102/255, blue: 0, alpha: 1) 
    } 
    
+4

が、私は**第二のように** ... – Moritz

+0

を「より良い」の定義:) – onmyway133

+0

:そして進値から色を作成するための新しい色に

を定義するために必要な、より少ないコードでは、私はUIColor拡張子を使用しました最初の方法は明らかに、客観的に、より良いです。 :D –

答えて

13

回答:私の専門家の意見で拡張し、。

考えてみましょう。あなたは、哲学において、UIColorによって提供される色の範囲を「拡張」しています。色の名前が明確で、新しい関数がAppleのメソッド命名プロトコル(すなわち<color name>Color)に従うならば、UIColorの拡張はきれいに見えます。 1つまたは2つの新しい色(私の意見では)は、専用のstruct全体を保証するものではありません。


ボーナス答え:struct(!またはenum)はぴったりでしょうか?

  • アプリが特別/カスタマイズされたテーマにするように設計されている場合、それは良いかもしれません標準色(すなわちカスタム のプライマリ "色)
  • のためのアプリを強制的に代替した場合として機能するenumを、持っています利用可能なオプションの具体的なリスト
  • 色の標準名(sharkBlueColor、誰ですか?)について考えることができない場合。
  • あなたのアプリが描画/ペイント用のものであれば(その場合、 'パレット'構造が良い考えです)。

...リストが続きます。スウィフト開発者として成熟するにつれて、あなたは分別して決定することを学ばなければなりません!

+1

」に同意すると、隠す理由がないかぎり、検出可能になります。色の豊富なリストを持つ一連のカラーセットです。その場合、おそらくenumが – sketchyTech

1

は、私は私がコピー/貼り付けの準備ができ進値を持っているのでxib/storyboardに同じ色を再利用することは容易である。この

enum AppColor: UInt32 { 

    case DarkBlue = 0x00437C 
    case LightBlue = 0x7CCEF0 

    var color: UIColor { 
     return UIColor(hex: rawValue) 
    } 

} 

この方法を列挙型を使用します。

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) 
    } 

} 
+1

'UIColor(hex:rawValue)'に行く方法でしょうか? https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIColor_Class/ –

関連する問題