2015-07-10 53 views
-1

我開始在迅速和我在一個程序我建立得到一個錯誤:Swift Error:'String?'沒有名爲成員「dataUsingEncoding」

'String?' does not have member named 'dataUsingEncoding'

以下是一段我的代碼:

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(contentsOfURL: NSURL(string: searchURL)!, encoding: NSUTF8StringEncoding, error: nil) 
     if error != nil{ 
      completion(searchString: searchStr, flickrPhotos: nil, error: error) 
     }else{ 


      // Parse JSON Response 

      let jsonData:NSData! = searchResultString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 

      let resultDict:NSDictionary! = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary 

      if error != nil{ 
       completion(searchString: searchStr, flickrPhotos: nil, error: error) 
      } 

任何人都可以請提出可能的解決方案 線在這,我得到的錯誤是:

let jsonData:NSData! = searchResultString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 

回答

2

它看起來像searchResultString是一個可選應該解開:

if let jsondata = searchResultString?.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) { 
    // process jsondata here 
} 
1

錯誤是告訴你什麼是錯的:

'String?' does not have member named 'dataUsingEncoding'

String?表示可選字符串,因此searchResultString變量是可選字符串,因此您必須使用可選鏈接爲了訪問其屬性和方法:

searchResultString?.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 
       ^

請記住,一個可選的是enum。當您訪問屬性或可選變量的成員時,您正在訪問Optional<T>類型,而不是可選包含的T類型。錯誤消息指出Optional<String>沒有名爲的成員dataUsingEncoding

相關問題