有可能在Swift上创build一个常量文件吗?

我有大约10个Swift 3应用程序。

它们几乎是相似的,但是在每个应用程序中都有一些变化的字段,我希望这些值可以在完全程序中使用(例如:每个公司的名称,应用程序的主要颜色等)。 这些值在整个程序中将是不变的。

我想通过应用程序创build一个常量文件,所以每个应用程序将使用的值将与其他应用程序不同,因此我不必每次都重复每个程序的每个值。 例如,如果我设置一个常数命名的company ,并将其值更改为company1company2等…取决于文件,我可以在所有应用程序中使用该company常量。 所以我不会在每次创build一个新的应用程序时手动replace整个应用程序中的variables。 只需将相应的值replace为每个应用程序。

那么,是否可以创build一个常量文件? 也许增加一个特殊的类。 我想也许它有另一个具体的名字,但我找不到它。

提前致谢!

是的,你可以在Swift中创buildConstants文件。 以下是方法:

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

用法:

 print(Constants.APP_NAME) 

创build一个类并通过创build对象进行访问:

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

用法:

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

最有效的方法是去struct

它实际上取决于你想要定义的内容:

  • 例如,在应用程序的字体的情况下,声明一个UIFont扩展名。 这样预编译器可以在编写代码的时候帮助你。

  • 如果有任何特定的常量(string,整数等),我会创build一个只包含enumsConstants.swift文件。 在这种情况下enumclassstruct因为它不能被错误地初始化

    枚举常量{静态让appIdentifier:string=“string”}

它只能以这种方式使用: Constants.appIdentifier不能通过执行Constants()来初始化(编译器会抛出一个错误)。

有关更多信息,请参见https://www.natashatherobot.com/swift-enum-no-cases/

这是一个稍微不同的解决scheme,不使用常量文件,而是使用plist的单例类。 这使您可以在所有应用程序中使用一个设置文件,然后每个应用程序只需要一个plist文件。

如果您将一个plist添加到名为“CustomSettings.plist”的项目中,并带有以下内容:

 <?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> 

然后使用以下代码创build一个名为Settings的新文件:

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

现在你只需要一个你可以在框架中使用的设置文件,然后每个应用程序只需要自定义内容的CustomSettings plist文件。 你可以使用它如下:

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

使用Structure来定义Constant

做如下。

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

像这样使用。

 print(Company.kCountry1) 

使用快速创build常量。 只需创build一个Constants.swift文件并定义你的常量:

 let mainColor = UIColor.green 

您可能需要单独对其进行版本化,也可能将其添加到自定义框架中。

最简洁的方法(遵循文件方法)是使用Constants.swift文件,并为每个variables集合使用该段的用例。 例如:

 class Constants { struct Validation { static let InvalidValue = "n/a" static let IncompleteValue = "Incomplete" } struct Labels { static let Username = "Username" } } 

并简单地使用:

 print(Constants.Validation.InvalidValue) 

这给你更可读的variables以及组织和聚焦的常量文件。 如果文件太大,您可以select使用相同的方法将其分割成多个文件。