#ios #swift #xcode #alamofire
#iOS #swift #xcode #alamofire
Вопрос:
Когда я использую функцию Alamofire с некоторыми CoreData, подобными UserDefaulfts.standard.object
тогда xcode выдает ошибку Extra Argument in call
я перепробовал приблизительно все ответы из Stackoverflow, подобные HTTPMethod
и .JSONEncoding
, но ничего не происходит
func Sync(){
let url = "http://abcd.com/reportlist"
let parameters = ["sort_by":"month_year",
"start":"1",
"end":"10"]
let key2 = UserDefaults.standard.object(forKey: "accessToken")
let headers = [
"Authorization": key2,
"Content-Type": "application/x-www-form-urlencoded"]
Alamofire.request(url, method: .post, parameters: parameters, headers: headers).responseJSON { response in
if response.result.isSuccess
{
var dictVal = response.result.value
let data1 = response.data
.................
Комментарии:
1. Привет. Вы не могли бы выбрать ответ, который показался вам полезным?
Ответ №1:
Удерживайте клавишу option и нажмите object(forKey
function, чтобы прочитать подсказку к документации. Вы увидите, что возвращаемый тип этой функции необязателен, поскольку ничто не может быть сохранено под ключом, который вы передаете, верно? Таким образом, ваша key2
константа также имеет необязательный тип.
Затем, когда вы используете его в словаре, headers
само становится типом "String: Optional(String)"
, поскольку одно из значений является необязательным (key2).
Alamofire ожидает, что в [String: String]
параметре будет указан тип headers
словаря, и, поскольку тип вашего headers
dict не совпадает, он генерирует эту ошибку — extra argument
. Нравится I don't know why you pass it to me I do not expect anything of type like that
Вот и все
Таким образом, вы либо используете string(forKey
метод, который вернет пустую строку в случае, если под переданным ключом ничего не сохранено, либо предоставляете значение по умолчанию, подобное этому
let key2 = (UserDefaults.standard.object(forKey: "accessToken") as? String) ?? "defaultAccessTokenOrNothing"
которая дает тот же результат, что и первое предложение
Ответ №2:
используемый здесь ключ имеет строковый тип, и при передаче заголовка вы не указали тип переменной в заголовке
прежде чем я использовал это
let key2:String = UserDefaults.standard.object(forKey: "accessToken") as! String
xcode снова рад кодировать…
Комментарии:
1. если вы используете
as! String
, то приложение завершит работу, когда «accessToken» не существует. Вы можете использовать:as? String ?? ""
(значение по умолчанию) илиguard...
илиif let...
или что угодно по вашему желанию. Используйте только ! когда вы уверены, что значение не равно нулю.2. Вы знаете, что есть даже
string(forKey
? Однако он также возвращает необязательное значение.