提问者:小点点

没有更多上下文的表达式类型是模棱两可的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 }
        ]
    }
}

共3个答案

匿名用户

当函数的参数名错误时,就会发生这种情况。

例:

functionWithArguments(argumentNameWrong: , argumentName2: )

你声明你的函数是:

functionWithArguments(argumentName1: , argumentName2: ){}

这通常发生在您更改变量名称时。确保在执行此操作时进行重构。

匿名用户

如果突出显示的方法或属性的任何部分试图访问具有不正确类型的属性或方法,则可能会发生这种情况。

以下是故障排除清单,请确保:

    < li >调用站点和实现中的参数类型匹配。 < li >调用站点和实现中的参数名称匹配。 < li >方法名在调用站点和实现中匹配。 < li >属性或方法的返回值在用法和实现上匹配(即:< code>enumerated()) < li >您没有具有潜在不明确类型(如协议或泛型)的重复方法。 < li >使用类型推断时,编译器可以推断出正确的类型。

一个战略

  • 尝试将方法分解为更多更简单的方法/实现。

例如,假设您正在自定义类型数组上运行 compactMap。在传递给 compactMap 方法的闭包中,初始化并返回另一个自定义结构。当您收到此错误时,很难判断代码的哪一部分有问题。

  • 出于调试目的,您可以使用 for in 循环而不是 compactMap
  • 您可以将它们分配给 for 循环中的常量,而不是直接传递参数。

此时,您可能会实现,例如,您认为要分配的属性实际上有一个属性,该属性具有您希望传递的实际值。

匿名用户

不是这个问题的答案,但是当我在这里寻找错误时,其他人可能会发现这也是有用的:

对我来说,当我尝试在数组上使用for(index,对象)循环而不添加时,我遇到了这个Swift错误。枚举()部分…