[英]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.