2017-06-09 19 views
0

我是新的服務器端swift。我使用蒸氣服務器端快速。在steam請求中,我需要獲取JSON作爲[String:Any]來檢查像String,Int或Float這樣的值的數據類型。但在請求中,我無法找到值的確切數據類型。無法從Steam請求上下文中將字典提取爲[String:Any]

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 
} 

我需要檢查它是一個字符串或Int(其他一些數據類型)。如果有人有解決方案,請讓我知道。

回答

0

如果您嘗試使用類型(:)功能獲取數據類型,結果您將得到任意類似的結果。

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

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

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

你必須檢查「if let」的所有情況。

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") 

} 

希望它會幫助你

+0

不,它轉換,如果我給body [「key」]?。String as String。否則,它的類型是「節點」。 – karthik

+0

如果你不知道他們的對象類型,那麼它不工作,你必須使用「如果讓」 – Ujesh

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:)函數來實現此目的。