我正在寻找最有效的方法来做到这一点:
在我的应用程序中有一个名为 Color() 的结构。它由 3 个浮点组成(RGB 格式中的每种颜色一个)。要向用户显示当前的红色、绿色或蓝色值,需要对其进行四舍五入。要在我的应用程序中保存和使用,它需要保持不变。 我只是将三个计算属性添加到我的 Color() 结构中。然而,这对我来说似乎是低效的编程。有更好的办法吗?
struct Color {
var red, green, blue: Float
var roundedRed: Float {
return round(red * 10) / 10
}
var roundedGreen: Float {
return round(green * 10) / 10
}
var roundedBlue: Float {
return round(blue * 10) / 10
}
init(red: Float, green: Float, blue: Float) {
self.red = red
self.green = green
self.blue = blue
}
}
我知道这对于处理效率来说并不重要。我只是想学习良好的代码礼仪。
最佳答案
使用格式化的String
属性向用户表示RGB值
不要关注您想要“为用户显示舍入值”,而是将其重新表述为您想要 String
表示您的 >red
、green
和 blue
Float
值,您希望使用这些值以格式化方式向您的用户。
使用存储的String
属性和属性观察器
你可以例如使用三个存储的 String
属性,这些属性使用属性观察器 (willSet
) 来跟踪 Float
属性中的值:
struct Color {
private static func toString(num: Float) -> String {
return String(format: "%.02f", num)
}
var red: Float { willSet { strRed = Color.toString(num: newValue) } }
var green: Float { willSet { strGreen = Color.toString(num: newValue) } }
var blue: Float { willSet { strBlue = Color.toString(num: newValue) } }
var strRed: String
var strGreen: String
var strBlue: String
init(red: Float, green: Float, blue: Float) {
self.red = red
self.green = green
self.blue = blue
strRed = Color.toString(num: red)
strGreen = Color.toString(num: green)
strBlue = Color.toString(num: blue)
}
}
// Float values used in application
let color = Color(red: 0.111, green: 0.2099, blue: 0.235)
// String representation of these used to present
// the values to the user
print(color.strRed, color.strGreen, color.strBlue) // 0.11 0.21 0.23
使用计算的String
属性
根据应用程序的不同,更明智的方法可能是让 String
属性成为计算属性,在调用时计算它们。
struct Color {
private static func toString(num: Float) -> String {
return String(format: "%.02f", num)
}
var red: Float
var green: Float
var blue: Float
var strRed: String { return Color.toString(num: red) }
var strGreen: String { return Color.toString(num: green) }
var strBlue: String { return Color.toString(num: blue) }
init(red: Float, green: Float, blue: Float) {
self.red = red
self.green = green
self.blue = blue
}
}
let color = Color(red: 0.111, green: 0.2099, blue: 0.235)
print(color.strRed, color.strGreen, color.strBlue) // 0.11 0.21 0.23
关于swift - 显示结构中数字的舍入值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40242369/