【问题标题】:Creating a url object in swift快速创建一个 url 对象
【发布时间】:2016-02-23 17:46:41
【问题描述】:

我在以下几行中遇到错误...

let taskData = session.dataTaskWithRequest(request, completionHandler: { ( data: NSData!, reponse:NSURLResponse!, error: NSError!) -> Void in

let parsedStores = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parseError) as! NSDictionary

if let stores: AnyObjec = parsedStores["Stores"]


这段代码可以在 IOS8 上为我工作,我将语法转换为最新的 Swift 语法,但它给我留下了这些错误,我试图专门针对语法编辑器上的错误区域,但它仍然没有不修。请帮我摆脱这些。谢谢

函数代码。

func loadRecords()
    {

        let urlString = "http://google.com"

        let config = NSURLSessionConfiguration.defaultSessionConfiguration()
        let session = NSURLSession(configuration: config, delegate: nil, delegateQueue: nil)


      //Create the URL Object 
       if let url = NSURL(string: urlString)
        {
            // Create the request object 
            let request = NSURLRequest(URL: url)

             // execute the request 
            let taskData = session.dataTaskWithRequest(request, completionHandler: { ( data: NSData!, reponse:NSURLResponse!, error: NSError!) -> Void in
                // Do something with the data back 
                if (data != nil)
                {
                    //get some data back 
                    print("\(data)")

                    var parseError:NSError?

                    let parsedStores = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parseError) as! NSDictionary


                    println("JSON Data \n \(parsedStores)")
                    if let stores: AnyObjec = parsedStores["Stores"]
                    {
                        self.parseJSON(stores)
                    }

                } else

                {    //we got an error
                    print("Error getting stores: \(error.localizedDescription)")


                }

            })

            taskData.resume()

【问题讨论】:

  • 错误说明了什么?
  • Cannot convert value type (NSDATA!, NSURLRESPONSE,NSERROR) to expected argument type (NSDATA?, NSURLRESPONSE?, NSERROR?)

标签: json swift web-services swift2 nsurl


【解决方案1】:

首先在新的 swift 中,这些值是可选的,您不必将它们指定为 NSData 或 NSError 或 NSResponse。

其次,您必须为 JSONObjectWithData 执行此操作,因为它具有 throws,这是一种新的错误处理方式。所以你需要使用新的 Do, try and catch。

   do {
   let parsedStores = try JSONSerialization.JSONObjectWithData(data, options: nil)
   //Your other code
   }
   catch {
   }

【讨论】:

    【解决方案2】:

    方法签名已更改,它现在接受可选项而不是强制解包对象:

    func dataTaskWithRequest(_ request: NSURLRequest,
       completionHandler completionHandler: (NSData?,
                                  NSURLResponse?,
                                  NSError?) -> Void) -> NSURLSessionDataTask
    

    这应该可以解决您的错误,但您可以阅读更多 here

    【讨论】:

    • 感谢您确实修复了该特定行的错误,我在 let parsedStores = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parseError) as! NSDictionary 行上也有一个错误,说 extra argument in line
    • 此方法的签名也已更改。查看此帖子的答案:stackoverflow.com/questions/31073497/…
    猜你喜欢
    • 2020-08-20
    • 2015-09-11
    • 2016-05-20
    • 1970-01-01
    • 2018-03-06
    • 2011-09-28
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多