我正在尝试升级到最新的Swift版本的项目代码的这部分代码中得到一个' 表达式类型没有更多上下文 '.我似乎无法弄明白.我尝试过不同的东西,却无法让它发挥作用.
问题出在这条线的语法上
let imageToDeleteParameters = imagesToDelete.map { ["id": $0.id, "url": $0.url.absoluteString, "_destroy": true] }
Run Code Online (Sandbox Code Playgroud)
完整代码:
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 }
]
}
}
Run Code Online (Sandbox Code Playgroud)
Sco*_*des 49
如果突出显示的方法或属性的任何部分试图访问类型不正确的属性或方法,就会发生这种情况。
这是故障排除清单,请确保:
enumerated()
)策略
例如,假设您compactMap
在一组自定义类型上运行。在传递给compactMap
方法的闭包中,您初始化并返回另一个自定义结构。当您收到此错误时,很难判断代码的哪一部分有问题。
for in
循环而不是compactMap
.此时,您可能会意识到,例如,您认为要分配的属性实际上有一个属性,该属性具有您想要传递的实际值。
The*_*Eye 24
不是这个问题的答案,但是当我来到这里寻找错误时,其他人可能会发现这也很有用:
对我来说,当我尝试for (index, object)
在阵列上使用循环而不添加.enumerated()
部件时,我得到了这个Swift错误...
Dan*_*das 12
如果您的参数名称错误,则会发生这种情况.
例:
functionWithArguments(argumentNameWrong: , argumentName2: )
Run Code Online (Sandbox Code Playgroud)
并且您将您的功能声明为:
functionWithArguments(argumentName1: , argumentName2: ){}
Run Code Online (Sandbox Code Playgroud)
当您更改变量的名称时,通常会发生这种情况.确保在执行此操作时重构.
Ale*_*ica 11
编译器无法确定使用Dictionary的类型,因为它不是同源的.您有不同类型的值.解决这个问题的唯一方法就是把它变成一个[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]
Run Code Online (Sandbox Code Playgroud)
这是结构的工作.它将大大简化这种数据结构的使用.
显式声明该映射函数的输入应该可以解决问题:
let imageToDeleteParameters = imagesToDelete.map {
(whatever : WhateverClass) -> Dictionary<String, Any> in
["id": whatever.id, "url": whatever.url.absoluteString, "_destroy": true]
}
Run Code Online (Sandbox Code Playgroud)
将该代码片段中的“WhateverClass”替换为“$0”的真实类,它应该可以工作。
当我在调用函数时在参数中的逗号前放置一个空格时出现此错误。
例如,我用过:
myfunction(parameter1: parameter1 , parameter2: parameter2)
Run Code Online (Sandbox Code Playgroud)
而它应该是:
myfunction(parameter1: parameter1, parameter2: parameter2)
Run Code Online (Sandbox Code Playgroud)
删除空间摆脱了错误信息
归档时间: |
|
查看次数: |
59594 次 |
最近记录: |