如何在Swift函数中为元类型参数提供默认值?

时间:2019-01-05 11:18:03

标签: swift function info.plist function-declaration metatype

在我的应用中,我经常需要访问存储在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)
}

0 个答案:

没有答案