【问题标题】:Ambiguous use of 'methodName' with UIColor extension模糊使用带有 UIColor 扩展的“methodName”
【发布时间】:2022-03-03 22:07:32
【问题描述】:

我正在尝试为 UIColor 定义扩展名

import UIKit

extension UIColor {
    convenience init(rgb:UInt){
        let red:CGFloat = CGFloat((rgb & 0xFF0000) >> 16)/255.0;
        let green:CGFloat = CGFloat((rgb & 0xFF00) >> 8)/255.0;
        let blue:CGFloat = CGFloat(rgb & 0xFF)/255.0;

        self.init(red: red, green: green, blue: blue, alpha: 1.0)
    }

    class func applicationGreenColor() -> UIColor {
        return UIColor(red: 0.255, green: 0.804, blue: 0.470, alpha: 1)
    }
}

每当我尝试使用任何添加的功能时,都会出现以下错误: 'applicationGreenColor' 的模糊使用。

我什至尝试添加非常简单的方法,例如:

func info(){
    println(self.description);
}

导致相同的编译错误:'info' 的模糊使用。

因此从 RGB 单元初始化工作正常。

我为 String 和其他类添加了多个扩展,但任何东西都适用于 UIColor。谁能告诉我我做错了什么?

更新 - 我可以看到我的 UIImage 扩展方法中定义的所有方法在代码完成建议中出现了两次。

【问题讨论】:

  • 我可以毫无问题地构建它。你确定你只添加一次方法吗?例如,您没有在 Obj-C 中创建的相同方法吗?
  • 我很确定我没有任何重复。这是一个空项目,只有一个框架目标和测试目标。我也可以很好地构建它,问题是当我尝试编译测试目标以运行测试时: func testBlueColor() { let blueColor = UIColor.applicationBlueColor(); XCTAssert(blueColor != nil, "Pass") } 这里抱怨 info 方法的模糊使用。
  • 奇怪,我可以毫无问题地使用它。
  • 也许你在同一个项目中导入了框架,所以编译器会看到它两次。
  • 如果你认为 Xcode 应该做得更好 -> bugreport.apple.com

标签: swift


【解决方案1】:

许多人正在为两个应用程序目标构建该文件,一个是应用程序本身,另一个是可能的嵌入式框架。检查该文件的文件检查器以及正在使用的文件,然后查看正在使用该类的这些文件的导入。

【讨论】:

  • 这个答案引导我找到我的解决方案。我在我的应用程序的源代码中定义了一个扩展,我试图在我的单元测试目标中引用扩展代码。在扩展的目标成员资格中,我选择了我的应用程序目标和测试目标。但是在测试代码中,我有@testable import AppTarget,正如问题所说,XCode 在自动完成中显示了我的扩展代码两次。在我的测试中删除 @testable import ... 解决了这个问题。
  • @levibostian,谢谢,我遇到了同样的问题,您的评论帮助我理解了它。但我认为你应该从目标成员中删除测试目标并保留@testable import ...
【解决方案2】:

就我而言,包含在多个目标中的文件已将import 添加到其中一个目标中。我假设 Xcode 13 在我更改一些代码时会自动执行此操作。

删除导入解决了问题。

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多