【问题标题】:Optional String added to output - Swift添加到输出的可选字符串 - Swift
【发布时间】:2016-07-11 14:46:52
【问题描述】:

一直致力于从 API 中提取数据,终于让它工作(我相信正确)但是当我在字典中打印出变量时,“可选”被添加到字符串中

        do {
            let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers) as? NSDictionary
            print(jsonResult)
            if (jsonResult != nil) {
                if let players = jsonResult?["players"] as? [Dictionary<String, AnyObject>] {
                    for player in players {
                        let personID = player["name"]
                        print(personID)
                    }
                }
            } else {
                print("No Data")
                // couldn't load JSON, look at error
            }
        }

JSON 输出示例:(请注意,我将其删减并仅使用了第一个元素)

Optional({
players =     (
            {
        name = "Derek Anderson";
    },

打印声明:

Optional(Derek Anderson)

我的假设是它打印可选字典,然后获取“玩家”名称。意思是我没有把那个名字拿出来。我已经从 player 数组中提取了名称,而不是 Optional。

我觉得我可能会以某种方式添加该可选数组,但似乎无法解决这个问题!

【问题讨论】:

  • 如果你确定有你名字的数据,你可以试试print(personID!)
  • 请看下面我的回答,发帖前应该再尝试一件事!希望这可以帮助某人

标签: json swift optional


【解决方案1】:

已解决,变量需要解包:

        do {
        let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers) as? NSDictionary
        print(jsonResult)
        if (jsonResult != nil) {
            if let players = jsonResult?["players"] as? [Dictionary<String, AnyObject>] {
                for player in players {
                    let personID = player["name"]!
                    print(personID)
                }
            }
        } else {
            print("No Data")
            // couldn't load JSON, look at error
        }
    }

【讨论】:

  • 强制解包不是最佳选择,因为它很容易导致崩溃,尤其是在处理服务器数据时。最好使用if-let
猜你喜欢
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
相关资源
最近更新 更多