Correct handling of NSJSONSerialization (try catch) in Swift (2.0)?

后端 未结 3 1024
自闭症患者
自闭症患者 2020-12-01 12:24

arowmy init works fine in Swift < 2 but in Swift 2 I get a error message from Xcode Call can throw, but it is not marked with \'try\' and the error is not handled

3条回答
  •  情歌与酒
    2020-12-01 12:44

    The jsonObject can throw errors, so put it within do block, use try, and catch any errors thrown. In Swift 3:

    do {
        let anyObj = try JSONSerialization.jsonObject(with: data) as! [String: Any]
    
        let label = anyObj["label"] as! String
        let value = anyObj["value"] as! Int
        let uprate = anyObj["uprate"] as! Int
        let sufix = anyObj["sufix"] as! String
    
        let props = Fieldpropertie(label: label, value: value, uprate: uprate, sufix: sufix)
    
        // etc.
    } catch {
        print("json error: \(error.localizedDescription)")
    }
    

    Or, in Swift 4, you can simplify your code by making your struct conform to Codable:

    struct Fieldpropertie: Codable {
        let label: String
        let value: Int
        let uprate: Int
        let suffix: String
    }
    

    Then

    do {
        let props = try JSONDecoder().decode(Fieldpropertie.self, from: data)
        // use props here; no manual parsing the properties is needed
    } catch {
        print("json error: \(error.localizedDescription)")
    }
    

    For Swift 2, see previous revision of this answer.

提交回复
热议问题