快速将可选字符串转换为Int或Int32(展开可选问题)

时间:2019-01-21 20:35:10

标签: swift optional forced-unwrapping

我正在尝试读取字符串并将其转换为int。我有一个解决方案,但似乎太复杂了。我想我仍在努力将自己的头包裹起来。

我在下面发布了代码以及每种解决方案遇到的编译器错误。

在此示例中,我尝试从UserDefaults中读取一个字符串并将其转换为整数值。

var baseURL = "https://someAzureblobContainer"
var token = "somereallylongToken"

$("#imageID").attr('src', baseURL + "someFilename" + token)

3 个答案:

答案 0 :(得分:0)

您需要强制转换为non optional Int32才能匹配您的返回类型。

您可以使用任何可选的绑定方法,也可以将返回类型更改为Int32?

答案 1 :(得分:0)

如果您要使用简单的解决方案,请将selectedSessionNum另存为Int

static func getSelectedSessionNum() -> Int32 {    
    return Int32(UserDefaults.standard.integer(forKey: "selectedSessionNum"))
}

否则,双重可选绑定

if let string = UserDefaults.standard.string(forKey: "selectedSessionNum"), let myInt = Int32(string) {
    return myInt
}

或nil合并运算符

if let string = UserDefaults.standard.string(forKey: "selectedSessionNum") {
    return Int32(string) ?? 0
}

是正确的方法

答案 2 :(得分:0)

如果要避免可选绑定,则可以使用flatMap,当在Optional上调用时,它可以将一个可选选项转换为另一个:

return UserDefaults.standard.string(forKey: "selectedSessionNum").flatMap(Int32.init) ?? 0

您还需要??(零合并运算符)来解决初始化程序失败或用户默认值不存在的情况。