Тип выражения неоднозначен без дополнительного контекста Swift
Я получаю " Тип выражения неоднозначен без контекста" в этой части кода из проекта, который я пытаюсь обновить до последней версии Swift. Кажется, я не понимаю. Я пробовал разные вещи, но не могу заставить его работать.
Проблема заключается в синтаксисе этой строки
let imageToDeleteParameters = imagesToDelete.map { ["id": $0.id, "url": $0.url.absoluteString, "_destroy": true] }
Полный код:
extension TutorialCreationRequest: WebserviceParametrable {
func toParameters() -> [String: AnyObject] {
let imageParameters = images.map { ["url": $0] }
let imageToDeleteParameters = imagesToDelete.map { ["id": $0.id, "url": $0.url.absoluteString, "_destroy": true] }
return [
"title": title,
"is_draft": isDraft,
"difficulty": difficulty,
"duration": duration,
"cost": cost,
"user_id": userId,
"description": description,
"to_sell": toSell,
"images": [imageParameters, imageToDeleteParameters].flatMap { $0 }
]
}
}
Ответы
Ответ 1
Не ответ на этот вопрос, но, поскольку я пришел сюда в поисках ошибки, другие могут счесть это также полезным:
Для меня я получил эту ошибку Swift, когда пытался использовать цикл for (index, object)
для массива без добавления части .enumerated()
...
Ответ 2
Компилятор не может понять, какой тип словаря, потому что он не является однородным. У вас есть значения разных типов. Единственный способ обойти это - сделать его [String: Any]
, который сделает все неуклюжим, как и весь ад.
return [
"title": title,
"is_draft": isDraft,
"difficulty": difficulty,
"duration": duration,
"cost": cost,
"user_id": userId,
"description": description,
"to_sell": toSell,
"images": [imageParameters, imageToDeleteParameters].flatMap { $0 }
] as [String: Any]
Это задание для структуры. Это значительно упростит работу с этой структурой данных.
Ответ 3
Это происходит, когда у вас есть функция с неправильными именами аргументов.
Пример:
functionWithArguments(argumentNameWrong: , argumentName2: )
и вы объявили свою функцию как:
functionWithArguments(argumentName1: , argumentName2: ){}
Обычно это происходит, когда вы меняете имя переменной. Убедитесь, что вы рефакторинг, когда вы делаете это.
Ответ 4
Явное объявление входных данных для этой функции отображения должно выполнить трюк:
let imageToDeleteParameters = imagesToDelete.map {
(whatever : WhateverClass) -> Dictionary<String, Any> in
["id": whatever.id, "url": whatever.url.absoluteString, "_destroy": true]
}
Подставьте реальный класс "$ 0" для "WhateverClass" в этом фрагменте кода, и он должен работать.
Ответ 5
Я получил эту ошибку, когда ставил пробел перед запятой в параметрах при вызове функции.
Например, я использовал:
myfunction(parameter1: parameter1 , parameter2: parameter2)
Принимая во внимание, что это должно было быть:
myfunction(parameter1: parameter1, parameter2: parameter2)
Удаление пробела избавило от сообщения об ошибке
Ответ 6
У меня было это сообщение, когда тип параметра функции не подходил. В моем случае это была строка вместо URL.