【问题标题】:Computed Property计算属性
【发布时间】:2022-01-05 20:47:38
【问题描述】:

我有这段代码,但其中有问题 我需要使用结构和计算属性根据 red 、 green 和 blue 的值来确定颜色名称。

struct Colour {
  var red:Int
  var green:Int
  var blue:Int
  var colourName: String
  var chosenColour: String {
    return "The colour is \(colourName)"
  }
}
 
var colour = Colour(red:255 , green:255 , blue:255, 

colourName:"White" )
print(colour.chosenColour)

我该如何解决?

【问题讨论】:

  • 您的方法有一个重大缺陷:颜色有两个真实来源(一个是它的 RGB 组件,一个是它的名称)。如果两者发生冲突怎么办?例如。如果我写Colour(red:0 , green:0 , blue:0 , colourName: "pink")怎么办?您应该使用 RGB 组件值来派生名称,而不是要求用户将名称冗余地提供给组件值。
  • 感谢您的解释
  • 每个颜色通道不再使用 8 位。

标签: swift computed-properties


【解决方案1】:

计算属性根据其他值(在对象中)计算其值。

一个有效的解决方案是switch 声明

struct Colour {
    var red: Int
    var green: Int
    var blue: Int
    var colourName: String
    var chosenColour: String {
        switch (red, green, blue) {
            case (255, 255, 255): return "White"
            case (0, 0, 0): return "Black"
            case (255, 0, 0): return "Red"
            case (0, 255, 0): return "Green"
            case (0, 0, 255): return "Blue"
            default: return "Mixed Colour"
        }
    }
}
 

【讨论】:

  • 这是解决问题的好方法。 (已投票)
  • 尽管拥有单独的属性colourNamechosenColour 有什么意义?将colourName 作为计算颜色名称属性,将chosenColour 作为第二个计算属性,将返回描述颜色的描述性语句,这样会更有意义。
猜你喜欢
  • 2020-02-05
  • 2013-06-29
  • 2020-02-03
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2018-03-26
  • 2019-06-18
相关资源
最近更新 更多