铸造任何?为 Int、String 或 Bool

Casting Any? to Int, String or Bool

我在 Swift 中有一个函数 returns 有吗?值,我想将结果(基于值类型)转换为 Bool、String 或 Int。

函数是这个:

static func value(forKey: SettingKeys) -> Any? {
    return settingManager.settings.filter({[=10=].key == forKey.rawValue}).first?.value
}

然后当我这样做时:

let printingEnabled = AppSettings().value(forKey:"printingEnabled") as? Int

我得到零。如果没有转换,该值为 Optional("1")。当我尝试将结果转换为 String 或 Int 时类似。知道如何将结果转换为我选择的类型吗?

谢谢。

您不希望 return Any? 的函数。这是一种噩梦。相反,您想使用泛型来确保该值是您想要的类型。例如:

static func value<T>(ofType: T.Type, forKey: SettingKeys) -> T? {
    return settingManager.settings.filter({[=10=].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?,并且是 Optional(1) 正如预期的那样。我没有看到它是 nil 的任何情况。但是我也不能让你的代码像写的那样编译,因为不清楚 SettingKeyssettings 是,所以我的代码可能与你的有很大不同。)