试图从 JSON 文件中读取 swift 2 过载错误显示

标签: Xcode json ios Swift
发布时间: 2017/3/5 14:17:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

大家好这里是样板代码解析 JSON 文件中的 Swift 2。我常用这之前和它的作品,但因为一些原因其破碎在最新版本的 Xcode 7.1 和 Swift 2。对这个家伙有什么想法?错误是"参数标签 ' (contentsOfFile:,选项:,错误:)' 不匹配任何可用重载"

import Foundation

extension Dictionary {
    static func loadJSONFromBundle(filename: String) -> Dictionary<String, AnyObject>? {
        if let path = NSBundle.mainBundle().pathForResource(filename, ofType: "json") {

            var error: NSError?
            let data = NSData(contentsOfFile: path, options: NSDataReadingOptions, error: &error)
            if let data = data {
                let dictionary: AnyObject? = NSJSONSerialization.JSONObjectWithData(data,
                    options: NSJSONReadingOptions(), error: &error)
                if let dictionary = dictionary as? Dictionary<String, AnyObject> {
                    return dictionary
                } else {
                    print("Level file '\(filename)' is not valid JSON: \(error!)")
                    return nil
                }
            } else {
                print("Could not load level file: \(filename), error: \(error!)")
                return nil
            }
        } else {
            print("Could not find level file: \(filename)")
            return nil
        }
    }
}

解决方法 1:

您正在使用不与时俱进 swift 代码,

更正了您的代码,请注意你应该选择最好的 NSDataReadingOption 那套房 u,我选择NSDataReadingOptions.DataReadingMapped

再加上一些 api 不要错误作为输入,所以我会删除它。

当你捕获该错误,您可以使用对象的通知 error 具有它声明明确,这就是为什么我删除了你的错误变量

最后,新的 api 用于解析 json,应该是在试着抓捕,这就是为什么我添加了 try-catch

import Foundation

extension Dictionary {
    static func loadJSONFromBundle(filename: String) -> Dictionary<String, AnyObject>? {
        if let path = NSBundle.mainBundle().pathForResource(filename, ofType: "json") {


            do{
                let data = try NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMapped)
                do{
                    let dictionary: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data,
                        options: NSJSONReadingOptions())
                    if let dictionary = dictionary as? Dictionary<String, AnyObject> {
                        return dictionary
                    } else {
                        print("Level file '\(filename)' is not valid JSON")
                        return nil
                    }
                }catch {
                    print("Level file '\(filename)' is not valid JSON: \(error)")
                    return nil
                }


            }catch {
                print("Could not load level file: \(filename), error: \(error)")
                return nil
            }

        } else {
            print("Could not find level file: \(filename)")
            return nil
        }
    }
}

所以基本上︰

  1. NSData(contentsOfFile: path, options:不会再采取错误。
  2. dictionary: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data, options不会再采取错误。
  3. 从文件获取 NSData 需要抓试一试吗
  4. 从 NSData 获取 json 对象需要试一试抓到吗
赞助商