Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 有吗?整型、字符串型或布尔型_Swift_Casting_Downcast - Fatal编程技术网

Swift 有吗?整型、字符串型或布尔型

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(

我在Swift中有一个函数,返回任何?值,我希望将结果(基于值类型)转换为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
我得零分。如果没有强制转换,则值是可选的(“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