Swift 有吗?整型、字符串型或布尔型
我在Swift中有一个函数,返回任何?值,我希望将结果(基于值类型)转换为Bool、String或Int 功能如下:Swift 有吗?整型、字符串型或布尔型,swift,casting,downcast,Swift,Casting,Downcast,我在Swift中有一个函数,返回任何?值,我希望将结果(基于值类型)转换为Bool、String或Int 功能如下: static func value(forKey: SettingKeys) -> Any? { return settingManager.settings.filter({$0.key == forKey.rawValue}).first?.value } 当我这样做的时候: let printingEnabled = AppSettings().value(
static func value(forKey: SettingKeys) -> Any? {
return settingManager.settings.filter({$0.key == forKey.rawValue}).first?.value
}
当我这样做的时候:
let printingEnabled = AppSettings().value(forKey:"printingEnabled") as? Int
我得零分。如果没有强制转换,则值是可选的(“1”)。当我尝试将结果强制转换为字符串或Int时也是如此。你知道如何将结果强制转换为我选择的类型吗
谢谢。您不希望函数返回任何?。这是一场噩梦。相反,您希望使用泛型来确保值是您想要的类型。例如:
static func value<T>(ofType: T.Type, forKey: SettingKeys) -> T? {
return settingManager.settings.filter({$0.key == forKey.rawValue}).first?.value as? T
}
printingEnabled
在这种情况下将是Int?
当然,您也可以将其包装在帮助程序中,如:
static func int(forKey: SettingKeys) -> Int? {
return value(ofType: Int.self, forKey: forKey)
}
(顺便说一句,虽然您肯定希望避免使用
Any?
并使用这种方法,但我实际上无法重现您的问题。printingEnabled
对我来说是Int?
,并且是可选的(1)
正如预期的那样。我看不到任何情况下nil
。但我也不能让您的代码按编写的方式编译,因为不清楚设置键和设置是什么,所以我的代码可能与您的代码有很大不同。)您不希望函数返回任何?
。这是一场噩梦。相反,您希望使用泛型来确保值是您想要的类型。例如:
static func value<T>(ofType: T.Type, forKey: SettingKeys) -> T? {
return settingManager.settings.filter({$0.key == forKey.rawValue}).first?.value as? T
}
printingEnabled
在这种情况下将是Int?
当然,您也可以将其包装在帮助程序中,如:
static func int(forKey: SettingKeys) -> Int? {
return value(ofType: Int.self, forKey: forKey)
}
(顺便说一句,虽然您肯定希望避免使用Any?
并使用这种方法,但我实际上无法重现您的问题。printingEnabled
对我来说是Int?
,并且是可选的(1)
如预期。我看不到任何情况下nil
。但我也不能让您的代码按编写的方式编译,因为不清楚设置键和设置是什么,所以我的代码可能与您的代码有很大不同。如果让PritingEnableDassString=AppSettings().value(forKey:“printingEnabled”)作为?字符串{let PrintingEnabledAsString=Int(pritingEnabledAsString)}
?简单地说:强制转换不会产生魔力。如果不能,它不会将值解释为另一种类型。谢谢。它作为Int工作,但如果让pritingEnabledAsString=AppSettings(),它不会作为Bool。。value(forKey:“printingEnabled”)作为?字符串{让printEnabledAsInt=Int(pritingEnabledAsString)}
?简单地说:强制转换不会产生魔力。如果不能,它不会将值解释为另一种类型。谢谢。它可以作为Int,但不能作为Bool。谢谢你的回答。我尝试了String,效果非常好。问题是Int和Bool返回nil。下面是我的代码:“让enablePrintString=AppSettings.value。”(ofType:String.self,forKey:SettingKeys.enableprinning)让enablePrintInt=AppSettings.value(ofType:Bool.self,forKey:SettingKeys.enableprinning)让enablePrintBool=AppSettings.value(ofType:Bool.self,forKey:SettingKeys.enableprinning)只返回可选(“1”)对于StringI,我怀疑您的设置中有字符串。(我特别怀疑字符串是字面上的“可选(1)”
),因此错误在于如何存储此数据,而不是如何检索。是的,数据存储在数据库中,存储为StringSo,这就是您的问题。字符串“可选(1)“
不是Int,所以as?Int
是正确的nil
。谢谢你的回答。我试过使用String,效果非常好。问题是Int和Bool返回nil。下面是我的代码:'让enablePrintString=AppSettings.value(ofType:String.self,forKey:SettingKeys.enablePrinting)让enablePrintInt=AppSettings.value(ofType:Bool.self,forKey:SettingKeys.enablePrinting)让enablePrintBool=AppSettings.value(ofType:Bool.self,forKey:SettingKeys.enablePrinting)),只返回字符串的可选值(“1”)。我怀疑您的设置中有字符串,然后。(我特别怀疑字符串是字面上的“Optional(1)”
),因此错误在于如何存储数据,而不是如何检索数据。是的,数据存储在数据库中,存储为string,所以这是您的问题。字符串“Optional(1)”
不是Int,因此as?Int
正确地说是nil
。