【问题标题】:swift Invalid Redeclaration快速无效重新声明
【发布时间】:2019-05-24 02:40:12
【问题描述】:
func dropShape() {
        if let shape = fallingShape {
            while detectIllegalPlacement() == false {
                shape.lowerShapeByOneRow()
            }
            shape.raiseShapeByOneRow()
            delegate?.gameShapeDidDrop(self)
        }
    }

您好,我正在接受“dropShape()”的无效重新声明,所以我做错了什么。谁能帮帮我

【问题讨论】:

  • 我猜你已经在应用程序的其他地方声明了dropShape()
  • 你已经声明了两个同名的方法。还要检查您是否没有使用dropShape 声明任何变量。
  • redeclarationrecompile 都可能导致该问题。

标签: ios swift


【解决方案1】:

该错误消息意味着您创建了两个具有相同名称的函数。

您不能对函数使用相同的名称和相同的签名。是的 函数重载 存在,这意味着您可以使用相同的名称和不同的参数。您可以使用相同的名称创建任意数量的函数。 经验法则是每个重载函数必须有不同的参数。

例如:

func dropShape() {        
}

func dropShape(points: CGPoint) {        
}

【讨论】:

  • 这个问题没有别的答案了
  • 这个答案是错误的。您可以在 swift 中使用具有相同名称的不同功能。 函数重载在swift中起作用:)
  • @Anil Varghese 我不这么认为
  • @Anil Varghese 那么你认为发生了什么?
  • 他声明了两个具有相同签名名称不同的函数。我指的是:)
【解决方案2】:

我有同样的问题,我已经通过删除编译源中的一个额外文件来解决它。

  1. 转到您的项目根目录。
  2. 转到构建阶段
  3. 点击Compile Sources,检查添加过两次的文件并删除其中一个。

这应该可以解决您的问题。

【讨论】:

  • 非常感谢@J。库什!有时 XCode 让我发疯
  • Xcode 项目文件中的 git 合并冲突后发生此错误(在构建阶段 -> 编译源中重复 .swift 源文件)
  • 非常感谢。它工作了\o/。我在 rebase 后遇到了这个问题。
  • 这个应该是公认的答案。你拯救了我的一天,伙计!
【解决方案3】:

我刚刚收到了这个确切的错误消息。对我来说,这是一个 class 和一个 struct 冲突。

对于 same 范围内的任何两个类型声明,您将收到错误,例如如果你使用 any 声明以下 2 种类型中的任何一种,你会得到一个错误

class employee{...}
struct employee{...}
func employee(){...}
protocol employee{...}

它不仅适用于类、结构或函数,它适用于所有事物,因为funcs、structs、enums、protocols 都是 Swift 中的 First class citizens

【讨论】:

  • 您应该始终以大写字母开头命名您的类、结构、枚举和协议。
  • 正确。这只是为了演示目的......我想展示即使使用功能也会发生同样的问题
【解决方案4】:

当您不导入 UIKit 并且类名应该是唯一的时发生此错误,因此请确保添加 import UIKit 并且函数或类具有唯一的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多