Я хочу получить токен как тип String, однако следующий код возвращает ошибку, поскольку «String» не конвертируется в «Void». Не могли бы вы рассказать мне, в чем проблема? Для того, чтобы разобрать JSON, я использовал SwiftyJSONSwift: возвращает строку JSON из задачи NSURLSession
func authentication() -> String {
let request = NSMutableURLRequest(URL: NSURL(string: "https://~~~/v2/authenticate/api")!)
request.HTTPMethod = "POST"
var loginID = "my_ID"
var apiKey = "my_APIKEY"
var postString:NSString = "login_id=\(loginID)&api_key=\(apiKey)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
println("error=\(error)")
return
}
println("response = \(response)")
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("responseString = \(responseString)")
let json = JSON(data:data)
if let token = json["auth_token"].stringValue{
println("\(token)")
return token ///Error Here
}
}
task.resume()
}
※ Edited Jan6th 7:50 (GMP + 9hr) я редактировал следующим образом, но я получил сообщение об ошибке, как "" Использование неразрешенного идентификатора "tokenString". Скажите, пожалуйста, как решить проблему.
func authentication() -> String {
let request = NSMutableURLRequest(URL: NSURL(string: "https://~~~/v2/authenticate/api")!)
request.HTTPMethod = "POST"
var loginID = "my_ID"
var apiKey = "my_APIKEY"
var postString:NSString = "login_id=\(loginID)&api_key=\(apiKey)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
println("error=\(error)")
return
}
println("response = \(response)")
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("responseString = \(responseString)")
let json = JSON(data:data)
if let token = json["auth_token"].stringValue{
println("\(token)")
tokenString = self.didReceiveAuthToken(token)///Edited
}
}
task.resume()
return tokenString
}
func didReceiveAuthToken(token : String) ->String{
return token
}
Я отредактировал код на основе вашего совета, как указано выше, однако я не могу получить токенную строку вне функции аутентификации. Не могли бы вы рассказать мне, как это сделать? – lalala
Вызовите метод, который вы создали, используя токен в качестве аргумента. –
не будет простым шаблоном делегирования, чтобы вызвать метод и передать данные другому классу, чтобы быть хорошим решением здесь также? – Woodstock