我在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)
答案 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
的成员