gpt4 book ai didi

swift - 显示结构中数字的舍入值的最佳方法

转载 作者:行者123 更新时间:2023-11-30 12:57:37 27 4
gpt4 key购买 nike

我正在寻找最有效的方法来做到这一点:

在我的应用程序中有一个名为 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 表示您的 >redgreenblue 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com