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

标签 swift performance struct

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

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

相关文章:

sql - 不同的数据库在注册表中标识

ios - 将数据传递给自定义 UITableViewCell 类

java - LibGDX 位图字体性能

java - 计算性能

C 指针地址改变而不赋值

c - 在 .S 中包含头文件以获得一些结构大小

c# - 如何在 C# 中从函数返回结构?

swift - TableView 中的 Collection View

ios - 这是通过触摸导航栏中间的按钮显示 View 并通过触摸其他任何地方将其删除的好方法吗?

swift - 在 Swift 函数中返回任意类型的对象