我知道它应该很简单,但我是 Swift 的新手,看不出这里有什么问题:
public class API : NSObject, NSURLSessionDelegate{
public class func sendHttpRequestNew(urlPath: String, params: AnyObject, method: String)-> Int {
var delegate = self
let txtUserName = "admin"
let txtPassword = "test1234"
let PasswordString = "\(txtUserName):\(txtPassword)"
let PasswordData = PasswordString.dataUsingEncoding(NSUTF8StringEncoding)
let base64EncodedCredential = PasswordData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
let url: NSURL = NSURL(string: urlPath)!
let request: NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.setValue("Basic \(base64EncodedCredential)", forHTTPHeaderField: "Authorization")
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.HTTPMethod = method
if method == "POST" || method == "PUT" {
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(params, options: [])
}
let config = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("unique")
let authString = "Basic \(base64EncodedCredential)"
config.HTTPAdditionalHeaders = ["Authorization" : authString]
let session = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
let downloadTask = session.downloadTaskWithRequest(request)
downloadTask.resume()
}
}
我在 self
这一行遇到错误:
let session = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
无法将“API.type”类型的值转换为预期的参数类型 NSURLSessionDelegate
我做错了什么?
最佳答案
这里的问题是方法是用 class
声明的,使其成为 type method
.当您在此方法中引用 self
时,您指的是类 API
本身,因此是错误。
公共(public)类 API:NSObject、NSURLSessionDelegate
声明API是NSObject的子类,符合NSURLSessionDelegate。
将委托(delegate)分配给 URL session 时,分配的对象必须是 API 的实例。 有两种方法可以解决这个问题:
- 通过去掉
class
前缀使 sendHttpRequest() 成为一个普通方法,或者, - 使用
let session = NSURLSession(configuration: config, delegate: API(), delegateQueue: nil)
创建 session ,创建 API 实例并将其作为委托(delegate)传递。
在我看来,第一种选择更好。这样你就可以在其他地方保留一个 API
的实例,并像那样对它进行网络调用。
关于ios - 无法将类型的值转换为预期的参数类型 NSURLSessionDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35542524/