Nicht konvertieren kann der Wert des Typs der erwarteten Argumenttyp NSURLSessionDelegate
Verstehe ich, es sollte sehr einfach sein, aber ich bin ein Neuling mit Swift und können nicht bekommen, was ist hier falsch:
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()
}
}
Bekam ich eine Fehlermeldung in dieser Zeile mit self
:
let session = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
Nicht konvertieren kann der Wert des Typs 'API.Typ' der erwarteten Argumenttyp NSURLSessionDelegate
Was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem hier ist die Methode deklariert ist, mit
class
, so dass es eintype-Methode
. Wenn Sie beziehen sich aufself
innerhalb dieser Methode, Sie beziehen sich auf die KlasseAPI
selbst, und daher der Fehler.public class API : NSObject, NSURLSessionDelegate
ist das deklarieren von API, um eine Unterklasse von NSObject, die entspricht NSURLSessionDelegate.
Beim zuweisen Delegierter an der URL die session, das Objekt zugewiesen werden muss, eine Instanz der API.
Es gibt zwei Möglichkeiten, dies zu beheben:
class
Präfix, oder,let session = NSURLSession(configuration: config, delegate: API(), delegateQueue: nil)
erzeugt eine Instanz der API und Pässe, die als delegieren.Meiner Meinung nach die erste option ist besser. Auf diese Weise können Sie halten Sie eine Instanz des
API
um irgendwo anderes und stellen Sie Ihr nennt es so.API.sendHttpRequestNew(self : API)
let api = API()
und rufen dann die Methode auf dieapi
Objekt: api.sendHttpRequestNew(...)