2016-02-17 71 views
1

我试图使用Swift 2语法尝试...做...捕获错误处理,但试图修改我的代码后,我得到了一些我无法弄清楚的错误。在此先感谢您的帮助。错误迁移到Swift 2:从抛出函数类型到非抛出函数类型和使用未声明类型的转换无效

在dispatch_async行上,错误:从'()throws - >()'类型的抛出函数向非抛出函数类型'dispatch_block_t'(aka'@convention(block)() - > )“)。

后来在代码中,在“let resultArray.NSArray”...我得到错误“使用未声明的类型NSArray”。

func searchFlickrForString(searchStr:String, completion:(searchString:String!, FlickrPhotos:NSMutableArray!, error:NSError!)->()){ 
    let searchURL:String = FlickrHelper.URLForSearchString(searchStr) 

    let queue:dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 

    dispatch_async(queue, { 

     var error:NSError? 

     let searchResultString:String! = try String(contentsOfURL: NSURL(fileURLWithPath: searchURL), encoding: NSUTF8StringEncoding) 
     do { 
      // Parse JSON Response 
      let jsonData:NSData! = searchResultString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 

      let resultDict:NSDictionary! = try NSJSONSerialization.JSONObjectWithData(jsonData, options: []) as! NSDictionary 
      do { 
       let status:String = resultDict.objectForKey("stat") as! String 
       if status == "fail" { 
        let error:NSError? = NSError(domain: "FlickrSearch", code: 0, userInfo: [NSLocalizedFailureReasonErrorKey:resultDict.objectForKey("message")!]) 

        completion(searchString: searchStr, FlickrPhotos: nil, error: error) 
       } else { 
        let resultArray:NSArrray = resultDict.objectForKey("photos").objectForKey("photo") as NSArray 

        let flickrPhotos:NSMutableArray = NSMutableArray() 

        for photoObject in resultArray{ 
         let photoDict:NSDictionary = photoObject as NSDictionary 

         var flickrPhoto:FlickrPhoto = FlickrPhoto() 
         flickrPhoto.farm = photoDict.objectForKey("farm") as Int 
         flickrPhoto.server = photoDict.objectForKey("farm") as String 
         flickrPhoto.secret = photoDict.objectForKey("farm") as String 
         flickrPhoto.photoID = photoDict.objectForKey("farm") as String 

         let searchURL:String = FlickrHelper.URLForFlickrPhoto(flickrPhoto, size: "m") 
         //download image 
         let imageData:NSData = NSData(contentsOfURL: searchURL, options: nil) 

        } 
       } 
      } catch let error as NSError{ 
       completion(searchString: searchStr, FlickrPhotos: nil, error: error) 
      } 
     } catch { 
      //completion(searchString: searchStr, FlickrPhotos: nil, error: error) 
     } 


    }) 

} 

}

+0

任何运气?你有什么解决方案吗? – NSIceCode

回答

2

要解决的第一个错误移动第一

do { 

直属

dispatch_async(queue 

对于你的第二个错误:你的代码更改为

let resultArray = resultDict.objectForKey("photos")!.objectForKey("photo") as! NSArray 

同样将“as”替换为“as!”

更改searchURL声明:

let searchURL = NSURL(string: FlickrHelper.URLForFlickrPhoto(flickrPhoto, size: "m")) 
相关问题