【问题标题】:Type 'UIColor?' has no member ".myCustomColor" Swift 5.0 [duplicate]输入“UIColor?”没有成员“.myCustomColor” Swift 5.0 [重复]
【发布时间】:2020-04-11 10:54:55
【问题描述】:

我将所有颜色都保存在专用颜色资源中。这允许我定义支持“任何外观”和“深色外观”的命名常量。现有的颜色资产有效(以前定义的),但如果我尝试定义新的(例如 myCustomColor)甚至复制现有的,那么我会得到:

Type 'UIColor?' has no member 'myCustomColor'

示例用法:

label.textColor = .myCustomColor

我知道我可以使用(用新创建的颜色测试,所以没有错别字):

UIColor(named: "myCustomColor")

但是,我不想更改此语法或让不同的语法使我的代码混乱。

我正在使用 Xcode 11.3 (11C29) 并使用 Swift 5。其他人有同样的问题吗?

【问题讨论】:

标签: swift colors assets uicolor xcode11.3


【解决方案1】:

您需要在 UIColor 的扩展中声明自定义颜色。

extension UIColor {
    static let myCustomColor = UIColor(named: "myCustomColor")
}

然后您可以如下使用此颜色:

label.textColor = UIColor.myCustomColor

【讨论】:

  • 您可能刚刚编辑了其他答案。
  • @matt True - 不幸的是,我在移动设备上,无法从这里取消删除它。我不应该删除它。
  • 谢谢克里斯,这就是要走的路!实际上,我对以前定义的值有一个 UIColor 扩展。问题是它被错误地移动到一个“不太明显”的文件夹/组,所以我没有看到它。这让我相信颜色集可以直接在代码中使用。现在一切正常。
  • @igunther 太棒了!很高兴你得到了排序!
【解决方案2】:

这里没有“问题”。与 Apple 的 UIColor.systemRed 类似的静态属性 UIColor.myCustomColor 永远不会因为您将颜色集放入资产目录而神奇地出现。如果你想要这样一个属性,你必须明确定义它。

【讨论】:

  • 我不确定我是否遵循。目前,我在 colors.xcassets 文件中定义了 30 种左右的颜色,它们工作得很好。每种“颜色”都定义了“任何外观”和“深色外观”,因此当我将 UI 从深色切换到正常时,它就可以正常工作。所以我想知道为什么新添加的内容无法编译。
  • 哦,是的,它们作为动态颜色“工作得很好”,但是您不能通过说.nameOfMyColor 在代码中引用它们。只有实际的 UIColor 静态属性才能以这种方式引用,无论是由 Apple 还是您定义。例如,如果您查看这篇文章 medium.com/developerinsider/…,它谈到了制作颜色集资产目录以及如何使用它们,但它从来没有说您可以说 .AppRed 来引用一个——因为您不能,而且您永远不可能。
  • 它们显示在界面构建器和颜色库中的颜色弹出菜单中,因此您可以通过这种方式访问​​它们;但是当您在代码中 写出颜色的名称时,为资产目录中的颜色集执行此操作的唯一方法是使用UIColor(named:)
  • 谢谢马特!你也是对的,没有“问题”。我现有的扩展被放错了地方,没有看到这让我相信魔法”:-)
  • 啊,是的,积极思考的力量!
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多