繁体   English   中英

Swift 3可选字符串转换为int

[英]Swift 3 optional string to int

我正在将Vapor用于Swift后端。 以下是我正在使用的代码。

drop.post("postTodo") { request in

var jsonContent: JSON?
if let contentType = request.headers["Content-Type"], contentType.contains("application/json"), let jsonData = request.json {
    jsonContent = jsonData
    print("Got JSON: \(jsonContent)")
}


guard let id = jsonContent?.node.object?["id"]?.string
    else {
        return JSON(["message": "Please include mandatory parameters"])
}

let tempId = Int(id)!

我正在获取“ id”作为可选字符串,例如: jsonContent?.node.object?[“ id”] ?. string的 Optional(“ 123”)

当我尝试使用Int(id)将其转换为int时! 我回到如果我尝试做让tempId = Int(id!)它给出了错误。

但是,当我在操场上做同样的事情时,我会得到适当的int值。

let id: String?

id = "1234"

let myInt = Int(id!)

为什么在我的Vapor应用程序中Int的可选字符串不能正常工作? 任何想法。

如果“ id”是一个可选字符串,那么您可能不想强制使用“!”将其解包。

最安全的方法是:

if let id = id
{
    let myIdAsInt = Int(id)
}

它在操场上“起作用”的原因是,您肯定是为字符串分配了一个非nil的值(因此,您无需进行强制解包即可)。

串!
可能包含一个字符串,或者可能包含nil。 就像常规的可选内容一样,但是Swift可以让您直接访问该值,而无需展开安全性。 如果您尝试这样做,则意味着您知道其中有一个价值– 但是,如果您错了,则应用程序将崩溃

var optionalString: String? = "123"

// first check if it doesn't contain nil
if let str = optionalString {
    // string to -> Int
    if let id = Int(str) {
        print(id) // work with id
    }
} else {
    // optionalString contains nil
}

我发现在我的iOS代码中,我有一个带有可选属性的struct ,因为当映射到Dict时,该struct为对象提供了可选值的键。

如果我将属性设为非可选,并在其正常工作后将其发送到蒸气后端。

因此,基本上是正确使用Optionals的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM