2016-11-28 8 views
4

私は約10のSwift 3アプリケーションを持っています。Swiftで定数ファイルを作成することはできますか?

これらはほぼ同じですが、各アプリケーションで変更されるフィールドがあります。これらの値を完全なプログラムで使用できるようにしたいと考えています(たとえば、各社の名前、アプリケーションの原色など)。 )。これらの値はプログラム全体で一定です。

私はアプリケーションごとに1つの定数ファイルを作成したいので、各アプリケーションで使用する値は他のものと異なるため、各値ごとに各値を常に繰り返す必要はありません。たとえば、companyという名前の定数を設定し、その値をcompany1,company2などに変更した場合、ファイルによってはすべてのアプリケーションで定数companyを使用できます。したがって、新しい変数を作成するたびに、アプリケーション全体で変数を手動で置き換える必要はありません。対応する値を各アプリケーションに置き換えるだけです。

したがって、定数ファイルを作成できますか?多分特別なクラスを追加するかもしれません。私はそれが別の具体的な名前を持っているかもしれないと思うが、私はそれを見つけることができなかった。

ありがとうございます!

答えて

12

はい、あなたはスウィフトでConstantsファイルを作成することができます。下記の方法があります:

struct Constants { 
    //App Constants 
    static let APP_NAME = "YOUR_APP_NAME" 
} 

使用法:

print(Constants.APP_NAME) 

オブジェクトを作成経由クラスとのアクセスを作成します。

class Constants{ 
    let APP_NAME = "YOUR APP NAME" 
} 

用途:

let constInstance = Constants() 
print(constInstance.APP_NAME) 

最も効率的な方法は、structに行くことです。

+0

そして別のファイルに構造体を追加できますか?私は後に私のコードのより良いメンテナンスのためにすべての定数で区切られたファイルを持っていたいと思います。 –

+0

はい、@ Error404では、新しいファイルを作成し、そこからアクセスするすべてのターゲットにファイルを追加するだけです。 – Marc

+0

@Marc私はあなたが構造ファイルの名前でインポートを使用することを意味するのでしょうか? –

0

定義ConstantにはStructureを使用してください。

以下のとおりです。

struct Company { 
    static let kCountry1 = "Company1" 
    static let kCountry2 = "Company2" 
    static let kCountry3 = "Company3" 
    static let kCountry4 = "Company4" 
} 

次のように使用します。

print(Company.kCountry1) 
+0

これらは静的なので 'var'ではなく' let'でなければなりません。静的なので、 'Company()'インスタンスでアクセスすることはできません。したがって、あなたの使い方の最初の行を削除してください。 – Connor

+0

@Connor Nevilleあなたの提案をお寄せいただきありがとうございます... – iMHitesh

0

定数はletで即座に作成されます。単にConstants.swiftファイルを作成し、定数を定義:

let mainColor = UIColor.green 

カスタムフレームワークに追加し、この別途、多分バージョンにしたいかもしれません。

1

それは実際にあなたが定義するかに依存します:

  • アプリのフォントの場合は、例えば、UIFont拡張子を宣言します。このようにして、プリコンパイラはコードの作成中に役立ちます。

  • 特定の定数(文字列、整数など)の場合は、enumsのみを含むConstants.swiftファイルを作成します。これは、これだけに使用することができる

:それは誤っ

enum定数{文字列=「string」は 静的せappIdentifier}を初期化することができないため、この場合にenumclass又はstructよりも優れていますway:Constants.appIdentifier Constants()を実行して初期化することはできません(コンパイラはエラーをスローします)。

ここでは詳細

1

ためhttps://www.natashatherobot.com/swift-enum-no-cases/を参照してくださいは、定数ファイルを使用していないわずかに異なる解決策が、PLISTを使用してシングルトンクラスです。これにより、すべてのアプリケーションで1つの設定ファイルを使用できるようになり、各アプリケーションにplistファイルが必要になります。

次の内容で「CustomSettings.plist」と呼ばれるプロジェクトにplistを追加する場合:

public class Settings { 
    static let instance = Settings() 

    public let companyName: String 
    public let primaryColor: UIColor 

    private init() { 
     let path = Bundle.main.path(forResource: "CustomSettings", ofType: "plist")! 
     let settingsDict = NSDictionary(contentsOfFile: path) as! [String: AnyObject] 

     companyName = settingsDict["CompanyName"] as! String 
     let colorString = settingsDict["PrimaryColor"] as! String 
     primaryColor = Settings.hexStringToUIColor(hex: colorString) 
    } 

    // Taken from: http://stackoverflow.com/questions/24263007/how-to-use-hex-colour-values-in-swift-ios 
    private static func hexStringToUIColor (hex:String) -> UIColor { 
     var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased() 

     if (cString.hasPrefix("#")) { 
      cString.remove(at: cString.startIndex) 
     } 

     if ((cString.characters.count) != 6) { 
      return UIColor.gray 
     } 

     var rgbValue:UInt32 = 0 
     Scanner(string: cString).scanHexInt32(&rgbValue) 

     return UIColor(
      red: CGFloat((rgbValue & 0xFF0000) >> 16)/255.0, 
      green: CGFloat((rgbValue & 0x00FF00) >> 8)/255.0, 
      blue: CGFloat(rgbValue & 0x0000FF)/255.0, 
      alpha: CGFloat(1.0) 
     ) 
    } 
} 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>PrimaryColor</key> 
    <string>cc3333</string> 
    <key>CompanyName</key> 
    <string>Company1</string> 
</dict> 
</plist> 

を次のコードを使用して設定と呼ばれる新しいファイルを作成しますフレームワークに含めることができる設定ファイルが1つだけ必要です。そして、各アプリケーションはカスタムコンテンツを含むCustomSettings plistファイルを必要とします。次のようにあなたはそれを使用することができます。

print (Settings.instance.companyName) 
view.backgroundColor = Settings.instance.primaryColor 
+0

シングルトンや構造体を使用してアプリケーションで定数を使用する最も効率的な方法は何ですか、私の友人は構造体に私にもっと記憶が必要だと言った –

0

を(ファイルのアプローチ以下)クリーンな方法は、各変数セットのセグメントユースケースというConstants.swiftファイルと構造体を使用することです。

class Constants { 

    struct Validation { 
     static let InvalidValue = "n/a" 
     static let IncompleteValue = "Incomplete" 
    } 

    struct Labels { 
     static let Username = "Username" 
    } 

} 

そして単に使用する:たとえば

print(Constants.Validation.InvalidValue) 

は、これはあなたに、より読みやすい変数だけでなく、組織的かつ集中定数ファイルを提供します。ファイルが大きすぎる場合は、同じ方法で複数のファイルに分割することもできます。

関連する問題