我从这个POST读了一个片段,但还没有完全理解。
https://www.hackingwithswift.com/example-code/system/how-to-parse-json-using-nsjsonserialization
我对以下代码段中的某些语法感到困惑。
在下文中,我不知道为什么try
会在这里,这对我来说是奇怪的语法。有关此表达式的try
和as!
的所有信息?
让json =尝试NSJSONSerialization.JSONObjectWithData(data,options:[])为! [String:AnyObject]
在下文中,我不知道as? [String]
在做什么?
如果让names = json [“names”]为? [String] {
我知道这个问题可能很重要,我只需要一个关键字来搜索相关的anwser,谢谢。这是我的整个代码块。
// define a string
let str = "{\"names\": [\"Bob\", \"Tim\", \"Tina\"]}"
// convert the string into NSUTF8StringEncoding
let data = str.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
// put the following statements in try catch block
do {
// not knowing why try goes here, strange syntax to me.
// any higher conception about try and as! for this expression
let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String: AnyObject]
// json should be an object(dictionary, hash) use the key "names" to store string array into names
// not knowing what is `as? [String]` doing? any keyword for this syntax?
if let names = json["names"] as? [String] {
print(names)
}
} catch let error as NSError {
print("Failed to load: \(error.localizedDescription)")
}
答案 0 :(得分:0)
//不知道为什么尝试去这里,给我一些奇怪的语法。怎么会失败?如!是什么语法,搜索它的任何关键字?
try
这里基本上是尝试在该行上执行该功能。如果失败,它将转到catch
。在这种情况下,只有print("Failed to load: \(error.localizedDescription)")
// json应该是一个对象(字典,哈希)使用键“名称”将字符串数组存储到名称中//不知道是什么? [String]干嘛?这个语法的任何关键字?
您感到困惑的是在json对象上执行if else
。它会检查key
name
,并且还要确保其value
为String
,因此as?
。在这种情况下,如果key
name
不存在,则不符合条件。如果value
的{{1}}不是name
,则不符合条件。
就像@Martin R在评论中提到的那样,你应该阅读更多关于Swift中的Type Casting的内容。 This应该对你有所帮助。如果您在Apple文档中遇到问题,请举例说明。
至于String
它实际上也用于其他语言,而不仅仅是Swift。您可以阅读更多here。