2017-05-10 7 views
0

UIColorsを配列内に格納していて、関数の戻り値としてUIColor拡張として取得するようにコードを変更しました。配列に値を格納するとSwiftで拡張関数を作成する

配列バージョン:

var colors : [UIColor] = [UIColor(red:0.35, green:0.40, blue:0.45, alpha:1.00), UIColor(red:0.38, green:0.78, blue:0.56, alpha:1.00), UIColor(red:0.61, green:0.73, blue:0.38, alpha:1.00)] 

拡張バージョン:

extension UIColor{ 
    class func getColor(level: Double) -> UIColor{ 
     switch level{ 
     case 0: 
      return UIColor(red:0.35, green:0.40, blue:0.45, alpha:1.00) 
     case 1: 
      return UIColor(red:0.38, green:0.78, blue:0.56, alpha:1.00) 
     case 2: 
      return UIColor(red:0.61, green:0.73, blue:0.38, alpha:1.00) 
     default: 
      return UIColor(red:0.35, green:0.40, blue:0.45, alpha:1.00) 
     } 
    } 
} 

ので、代わりのcolors[0]私はUIColor.getColor(level: 0)

を使用することができますがそうすることで任意のポイントがあり、それがどんな良いですか?

+0

色は配列に意味がありますか? (具体的にインデックスでアクセスする必要がありますか?)そうでなければ、名前付きの静的プロパティを使用する方が良い考えです。 Compare http://stackoverflow.com/q/42030338/2976878 – Hamish

答えて

1

エクステンションの1つの利点は、複数のクラスにわたって幅広い用途があることです。しかし、定数のためのシングルトンを作成した場合でも同じ結果が得られます。 1つの問題は、配列から色を削除して追加するほうがずっと簡単で、実行時にそれを行うことができるということです。拡張機能にハードコードすると、実行時にそれを変更することはできません。

カラー配列のような定数が複数ある場合、その目的のためにシングルトンクラスを使用することができます。

膨大な量の色を保存しておく必要がある場合は、拡張機能が正常に動作します。

あなたの質問のリストのような色数が少なかったり、リストを変更する必要があることがわかっている場合は、配列はうまくいくでしょう。

+0

私のプロジェクトには7色ありますので、私は配列と一緒に行くと思います。 – codddeer123

2

別のオプションとして、すべてを個別の静的値として保存することもできます。 UIColorは既にそのようにいくつかの色を保存しています(例えば、UIColor.redUIColor(red: 1, green: 0, blue: 0, alpha: 1)と等価です)。そうすることでより一貫性があります。それはあなたにこれを与えるでしょう:

extension UIColor { 
    static let color1 = (red:0.35, green:0.40, blue:0.45, alpha:1.00) 
    static let color2 = (red:0.38, green:0.78, blue:0.56, alpha:1.00) 
    static let color3 = (red:0.61, green:0.73, blue:0.38, alpha:1.00) 
    static let color4 = (red:0.35, green:0.40, blue:0.45, alpha:1.00) 
} 
+0

そしてそれはどのようにenum( 'enum Colors {static let color1 = UIColor(赤:0.35、緑:0.40、青:0.45、アルファ:1.00)})と比較しますか? – codddeer123

+0

@ codddeer123機能的には、違いはないと私は思います。個人的には、一貫性のために拡張機能を使うつもりですが、基本的に個人的な好みの問題です。 –

+1

@ codddeer123あなたが追加している色が「気に入っている」かどうかによって、 'UIColor'が与えるデフォルトのカラーパレットの一部でなければなりません。たとえば、赤、青、緑の色合いが異なる独自のパレットを 'UIColor'デフォルトに設定している場合、' customRed'、 'customBlue'を追加するのではなく、静的プロパティを持つ' enum'がより適切です'UIColor'拡張のプロパティー)。 – Hamish

関連する問題