Привет, я новичок здесь, и я пытаюсь получить значение из запроса вне функции запроса в VC, но я не могу сделать это, я получаю ошибки, которые я пробовал несколькими способами, но я продолжаю получать разные ошибки, теперь я получаю Type Any, не имеет элементов подстроки, не могли бы вы помочь мне получить строку из запроса и найти массив и взять значение из него.Alamofire и SwiftyJSon получают значение вне функции запроса
Мне нужно получить значение из Json Strin в VC, так что я пытаюсь таким образом:
let retur = Json()
retur.login(userName: userName.text!, password: password.text!) { (JSON) in
print(JSON)
let json = JSON
let name = json["ubus_rpc_session"].stringValue
print(name)
Ответ: { "jsonrpc": "2,0", "идентификатор": 1, "результат": [0, { "ubus_rpc_session": "70ea230f29057f54459814459b5a316e", "тайм-аут": 300, "истекает": 300, "ACLs": { "группа доступа": { "суперпользователь": [ "читать",» write "]," unauthenticated ": [" read "]}," ubus ": {" ": [" "]," session ": [" access "," login "]}," uci ": { "*": ["read", "write"]}}, "data": {"username": "root"}}]}
Мой запрос:
private func makeWebServiceCall (urlAddress: String, requestMethod: HTTPMethod, params:[String:Any], completion: @escaping (_ JSON : Any) ->()) {
Alamofire.request(urlAddress, method: requestMethod, parameters: params, encoding: JSONEncoding.default).responseString { response in
switch response.result {
case .success:
if let jsonData = response.result.value {
completion(jsonData)
}
case .failure(_):
if let data = response.data {
let json = String(data: data, encoding: String.Encoding.utf8)
completion("Failure Response: \(json)")
}
Функция, которая вызывается метод запроса:
public func login(userName: String, password: String, loginCompletion: @escaping (Any) ->()) {
let loginrequest = JsonRequests.loginRequest(userName: userName, password: password)
makeWebServiceCall(urlAddress: URL, requestMethod: .post, params: loginrequest, completion: { (JSON : Any) in
loginCompletion(JSON)
})
вы не можете сделать значение [ «ключ»] на любом, ваше завершение блок нужно вернуть JSON [String: Любой] или конвертировать Любой блок на что вам нужно внутри функции –
Я попытался изменить тип значения здесь: завершение: {(JSON: [String: Any]) в loginCompletion (JSON), но все же в этой строке: let name = json ["ubus_rpc_session"]. stringValue, я получаю ту же ошибку. –
если вы используете [String: Any], у вас еще может быть ошибка в вопросе «Any». –