有可能在Swift上创build一个常量文件吗?
我有大约10个Swift 3应用程序。
它们几乎是相似的,但是在每个应用程序中都有一些变化的字段,我希望这些值可以在完全程序中使用(例如:每个公司的名称,应用程序的主要颜色等)。 这些值在整个程序中将是不变的。
我想通过应用程序创build一个常量文件,所以每个应用程序将使用的值将与其他应用程序不同,因此我不必每次都重复每个程序的每个值。 例如,如果我设置一个常数命名的company
,并将其值更改为company1
, company2
等…取决于文件,我可以在所有应用程序中使用该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一个只包含
enums
的Constants.swift
文件。 在这种情况下enum
比class
或struct
因为它不能被错误地初始化枚举常量{静态让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使用相同的方法将其分割成多个文件。