Swift错误:'字符串?'没有名为'dataUsingEncoding'的成员

时间:2015-07-10 16:29:20

标签: ios json swift nsdata

我在swift开始,我在正在构建的程序中出错:

  

“的字符串?没有名为'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 个答案:

答案 0 :(得分:2)

看起来searchResultString是一个应该被解包的可选项:

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

答案 1 :(得分:1)

错误告诉你错误:

  

'字符串&#39?;没有名为' dataUsingEncoding'

的成员

String?表示可选字符串,因此searchResultString变量是一个可选字符串,因此您必须使用可选链接才能访问其属性和方法:

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

请记住,可选项是enum。当您访问可选变量的属性或成员时,您将访问Optional<T>类型,而不是可选包含的T类型。该错误消息指出Optional<String>没有名为dataUsingEncoding的成员