在swift中创建一个url对象

时间:2015-11-21 06:00:43

标签: json swift web-services swift2 nsurl

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

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()

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

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