我在Swift中有一个返回Any的函数?值,我想将结果(基于值类型)转换为Bool,String或Int。
功能是这样的:
static func value(forKey: SettingKeys) -> Any? {
return settingManager.settings.filter({$0.key == forKey.rawValue}).first?.value
}
然后当我这样做时:
let printingEnabled = AppSettings().value(forKey:"printingEnabled") as? Int
我得到零。如果不进行强制转换,则值为Optional(“ 1”)。当我尝试将结果转换为String或Int时类似。关于如何将结果转换为自己选择的类型的任何想法?
谢谢。
答案 0 :(得分:2)
您不希望函数返回Any?
。这是一场噩梦。相反,您想使用泛型来确保值是您想要的类型。例如:
static func value<T>(ofType: T.Type, forKey: SettingKeys) -> T? {
return settingManager.settings.filter({$0.key == forKey.rawValue}).first?.value as? T
}
那么这将是:
let printingEnabled = AppSettings().value(ofType: Int.self, forKey:"printingEnabled")
printingEnabled
在这种情况下将为Int?
。
当然,您也可以将其包装在以下帮助器中:
static func int(forKey: SettingKeys) -> Int? {
return value(ofType: Int.self, forKey: forKey)
}
(顺便说一句,虽然您确实想避免使用Any?
并且使用这种方法,但我实际上无法重现您的问题。printingEnabled
对我来说是Int?
,对{ {1}}符合预期。我看不到它是Optional(1)
的情况,但是我也无法使您的代码像编写的那样编译,因为不清楚nil
和{{1 }}是,所以我的代码可能与您的代码大不相同。)