关于try和“as?”的语法“如!”

时间:2016-07-18 06:03:37

标签: swift

我从这个POST读了一个片段,但还没有完全理解。

https://www.hackingwithswift.com/example-code/system/how-to-parse-json-using-nsjsonserialization

我对以下代码段中的某些语法感到困惑。

在下文中,我不知道为什么try会在这里,这对我来说是奇怪的语法。有关此表达式的tryas!的所有信息?

  

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

1 个答案:

答案 0 :(得分:0)

  

//不知道为什么尝试去这里,给我一些奇怪的语法。怎么会失败?如!是什么语法,搜索它的任何关键字?

try这里基本上是尝试在该行上执行该功能。如果失败,它将转到catch。在这种情况下,只有print("Failed to load: \(error.localizedDescription)")

  

// json应该是一个对象(字典,哈希)使用键“名称”将字符串数组存储到名称中//不知道是什么? [String]干嘛?这个语法的任何关键字?

您感到困惑的是在json对象上执行if else。它会检查key name,并且还要确保其valueString,因此as?。在这种情况下,如果key name不存在,则不符合条件。如果value的{​​{1}}不是name,则不符合条件。

就像@Martin R在评论中提到的那样,你应该阅读更多关于Swift中的Type Casting的内容。 This应该对你有所帮助。如果您在Apple文档中遇到问题,请举例说明。

至于String它实际上也用于其他语言,而不仅仅是Swift。您可以阅读更多here