2017-12-04 10 views
0

私はまだこれらのプログラミングの概念をすべて把握しようとしていますが、私は単純なUIViewをrgbカラーで持っています。私はこれをさまざまな視点で使っています。スイフト:頻繁に使用するコードを一箇所に置いて再利用する方法は?

今、私はまだハードすべてのビューで色をコーディングしています:

UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0 

しかし、私は、単一の迅速なファイル(例えばColors.swiftと呼ばれる)を作成してみたいとそこに私がしたいのですがすべての色を入れてください。

私はこのファイルから色を取得したいので、必要に応じて色を変更する場所は1つだけです。

私は迅速なファイルで関数を作成し、別の場所から呼び出す方法を知っています。たとえば、私が再利用するすべてのアニメーションは1つのファイルに配置されますが、それらの色では私はブラックアウトしています。私はそれらを別のファイルに配置してそこから取り除く方法を知らない。 Perfectは色分けされた色(青、緑、...)とそれに対応するrgb値を持つ何らかのスイッチケースで、色の名前を呼び出すだけです。これは私が作成し、迅速なファイルのようになります。

import UIKit 

let myColors = UIColor() 

switch myColors { 
case .red: 
    UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0) 
case .gray: 
    UIColor(red: 120/255, green: 120/255, blue: 120/255, alpha: 1.0) 
default: 
    UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0) 
} 

しかし、私は迅速なファイルにswitch文を書くとき、私はこれを動作させることはできません。私が受け取るエラーはです。 "文は最上位には許可されていません"それぞれのケースでエラーが返されます。 "UIColorイニシャライザの結果は未使用"ですが、何かの中に配置する方法はありませんか?

おそらく全体のアプローチは間違っていますか?

+2

[UIColor値でスウィフト列挙型を作成するにはどうすればよいですか?](https://stackoverflow.com/questions/39112879/how-can-i-make-a-swift-enum-with-uicolor-値) –

答えて

4

この機能にはSwift Extensionsを使用できます。

// Colors.swift 
extension UIColor { 

    var myCustomRed: UIColor { 
     return UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0) 
    } 
} 

// elsewhere in the app 
view.backgroundColor = UIColor.myCustomRed 

既存の色と競合する名前を使用しないように、好きなだけカスタム実装を配置できます。詳細については

ドキュメントにSwift Extensions Documentation

UPDATE参照してください。繰り返し使用関数と変数については

enum ThemeColors: UIColor { 
    case red = UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0) 
    case blue = UIColor(red: 2/255, green: 51/255, blue: 120/255, alpha: 1.0) 
} 

view.backgroundColor = ThemeColors.red 
+0

ありがとうございます。これはうまくいきましたが、関数型プログラミングの概念の詳細を学ぶためにクラスに入れたいと思っていましたが、この場合はUIColorの拡張が簡単です。 – RjC

+1

クラスの使用はオブジェクト指向プログラミングと見なされます。 Swiftには、このタイプのものの拡張機能があります。あなたが本当にしたい場合enumを使用することができます例の悪い更新 – Scriptable

+0

助けをありがとう! – RjC

1

あなたはクラスに入れる必要があります。あなたがクラスをインスタンス化する必要はありませんので、あなたは、単に、色変数静的を行うことができます。

class Colors: NSObject { 
    static let color: = UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0) 
} 

次に、このようにそれを使用する:あなたはまた、そこにあなたの列挙型を定義することができ

import Colors 

Colors.color 

を。

+0

ありがとう、それは私が探していたものでした。これは、私が列挙を作成しようとすると、私は "期待される宣言"というエラーが出ることをよく知っています。 – RjC

1

ルートクラスを持っている1つのGlobalFunctions.swiftクラスがNSObjectであることを確認し、あなたの宣言をここで繰り返し使用される変数と関数

あなたのケースでは

: - :GloablFunctions.swiftのためのオブジェクトを作成する必要はありません

GlobalFunctions.redColor 
GlobalFunctions.greyColor 
GlobalFunctions.defaultColor 

import UIKit 

class GlobalFunctions: NSObject { 

    static let redColor = UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0 
    static let greyColor = UIColor(red: 120/255, green: 120/255, blue: 120/255, alpha: 1.0) 
    static let defaultColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0) 
} 

あなたはあなたのようなrequieredビューコントローラでこの色を使用することができます。 static変数と宣言しているため、カラーオブジェクトに直接アクセスすることができます。クラス関数を追加して、プロジェクトで再帰的に使用することもできます。

関連する問題