无法从蒸汽请求上下文中提取字典为[String:Any]

时间:2017-06-09 12:26:48

标签: swift vapor

我是服务器端swift的新手。我使用steam来服务器端swift。在蒸汽请求中,我需要将JSON作为[String:Any]来检查值的数据类型,如String,Int或Float。但是在请求中我无法找到值的确切数据类型。

drop.post("post") { (request) -> ResponseRepresentable in
     guard let name = request.data["value"]?.string else {
        throw Abort.badRequest
     }
     return value
}

在上面的方法中,它直接转换并返回值为String。我需要检查它是String还是Int(其他一些数据类型)。我无法按照下面给出的条件进行检查。

guard let name = data["value"] as? String else {
    \\do something
}

我需要检查它是String还是Int(其他一些数据类型)。如果有人有解决方案,请告诉我。

2 个答案:

答案 0 :(得分:0)

如果你尝试使用类型(of :)函数获取数据类型,结果你会得到这样的可选项。

let dic = ["key":"string"] as [String : Any]

let str = dic["key"] //"string"

type(of: str) //Optional<Any>.Type

你必须检查&#34;如果让&#34;对于所有情况。

let dic = ["key":"string"] as [String : Any]

if let str = dic["key"] as? String {
   print("String value")

} else if let intvalue = dic["key"] as? Int {
    print("Int value")

} else if let boolvalue = dic["key"] as? Bool {
   print("Bool value")

}

希望它能帮到你

答案 1 :(得分:0)

由于您正在访问JSON,我会这样做。

guard let json = request.json else {
    throw ...
}

if let string = json.string {
    // JSON is a string
} else if let object = json.object {
    // JSON is a [String: JSON] 
}

// continue unwrapping for different data types

我不建议为此目的使用type(of:)功能。