ios - Apple 建议使用什么:自定义结构或扩展?
问题描述
有什么推荐的?
- 选项 1:自定义结构
- 选项 2:扩展类
下面的示例只是一个示例函数,它从红色、绿色和蓝色值返回 UIColor,而无需将数字除以 255。代码是用 Swift 5 编写的。
例如:
struct colorFrom {
func RGB(r: CGFloat, g: CGFloat, b: CGFloat) -> UIColor {
var red, green, blue, alpha: CGFloat
red = r / 255
green = g / 255
blue = b / 255
alpha = 1
var color: UIColor
color = UIColor(red: red, green: green, blue: blue, alpha: alpha)
return color
}
}
extension UIColor {
func RGB(r: CGFloat, g: CGFloat, b: CGFloat) -> UIColor {
var red, green, blue, alpha: CGFloat
red = r / 255
green = g / 255
blue = b / 255
alpha = 1
var color: UIColor
color = UIColor(red: red, green: green, blue: blue, alpha: alpha)
return color
}
}
colorFrom().RGB(r: 153, g: 153, b: 153)
UIColor().RGB(r: 153, g: 153, b: 153)
解决方案
Apple 没有任何官方顾问来衡量这两种设计选择 AFAIK 之间的区别。
话虽如此,扩展中的便利初始化程序或静态方法UIColor
非常有意义。但不是实例方法,而是static
方法。
但考虑到 RGB 值通常表示为 0.0 到 1.0 之间的值,我可能会认为您期望 0 到 255 之间的值在参数标签和快速帮助中都非常明确,例如:
extension UIColor {
/// Initializes and returns a color object using the specified RGB component values represented as
/// values between 0 and 255 (rather than between the customary 0.0 to 1.0).
///
/// - Parameters:
/// - red: Value between 0 and 255.
/// - green: value between 0 and 255.
/// - blue: Value between 0 and 255.
convenience init(eightBitRed red: CGFloat, green: CGFloat, blue: CGFloat) {
self.init(red: red/255, green: green/255, blue: blue/255, alpha: 1)
}
}
然后您可以执行以下操作:
let plum = UIColor(eightBitRed: 148, green: 33, blue: 147)
仅针对这种方法的自定义struct
(同样,如果您这样做,这将是一种static
方法),也可能没有意义。如果您有一堆方法在 a 中进行一些逻辑分组struct
,那么您可能会考虑它。但是根据提供的信息,我不会为此创建单独的结构。(如果您要创建struct
,则struct
的名称应以大写字母开头。)
推荐阅读
- python - 比较python中列表中的字符串但相等的值不显示为true
- javascript - 退出全屏后未触发 JavaScript 'keyUp' 事件
- google-cloud-platform - 谷歌云 vpn:我在谷歌云上的 Openvpn 上安装,当连接只到达 ip 而不是域
- ruby-on-rails - Rails FactoryBot/Rspec 不使用 let 创建
- python - 在pyplot中切换行和列
- css - 如何使用 Bulma 隐藏断点平板下的列?
- java - Java8 和 Node 之间的“java.lang.Exception:没有找到提供者的任何协议文件...”
- javascript - 如何获取 JavaScript 变量?
- python - Python pandas:将所选列保留为系列而不是数据框
- c# - 邮件程序问题:处理您的请求时发生错误。ASP.NET MVC 5