在我的应用中,我经常需要访问存储在Info.plist
中的值。我没有每次都输入Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
之类的东西,而是创建了一个不错的包装器。
在Info.plist
中访问值的方法声明如下:
static func get<T>(_ name: String, as type: T.Type) -> T? {
return Bundle.main.infoDictionary?[name] as? T
}
这样调用时效果很好:
let appID = IPWrapper.get("APP_ID", as: String.self)
但是,每次指定类型都很麻烦,因为Info.plist
中的许多值都是String
类型。这就是为什么我想为type
参数提供一个默认值,以便我可以忽略它。
不幸的是,提供默认值(在函数声明中添加= default_value
的常用方法不起作用:Xcode引发错误,提示“无法将类型'String.Type'的默认参数值转换为type “ T.Type””。
// This code doesn’t work.
static func get<T>(_ name: String, as type: T.Type = String.self) -> T? { … }
我做错什么了吗?
UPD :看起来过载是解决此问题的唯一方法。
static func get<T>(_ name: String, as type: T.Type) -> T? {
return Bundle.main.infoDictionary?[name] as? T
}
static func get(_ name: String) -> String? {
return get(name, as: String.self)
}