gpt4 book ai didi

ios - 如何扩展 RealmOptional 以在 Swift 中的 Float 上添加一个函数?

转载 作者:行者123 更新时间:2023-11-29 01:22:12 25 4
gpt4 key购买 nike

我想在我的 RealmOptional 类中添加一个带有特定舍入数字的 round 方法。如果您想将该方法添加到您的 CGFloat 类中,您可以编写以下内容(我从 this answer 中借用):

public extension CGFloat {
func roundToDecimals(decimals: Int = 2) -> CGFloat {
let multiplier = CGFloat(10^decimals)
return round(multiplier * self) / multiplier
}
}

是否可以将此功能添加到 RealmOptional 类,其中只有定义为 Float 的类型必须添加方法。

我不知道它应该如何实现,但下面吐出错误:

Type 'T' constrained to non-protocol type 'Float'

import RealmSwift
extension RealmOptional where T: Float {
func roundToDecimals(decimals: Int = 2) -> CGFloat {
let multiplier = CGFloat(10^decimals)
return round(multiplier * self.value!) / multiplier
}
}

最佳答案

作为解决方法,您可以定义一个协议(protocol),让包装类型实现该协议(protocol),然后使用该协议(protocol)作为通用约束并委托(delegate)给在该值上实现的方法,如下所示。

import QuartzCore

protocol Roundable {
func roundToDecimals(decimals: Int) -> CGFloat
}

extension Float : Roundable {
func roundToDecimals(decimals: Int = 2) -> CGFloat {
let multiplier = pow(10.0, Float(decimals))
return round(multiplier * CGFloat(self)) / multiplier
}
}

extension RealmOptional where T: Roundable {
func roundToDecimals(decimals: Int = 2) -> CGFloat {
return self.value!.roundToDecimals(decimals)
}
}

但我建议改为使用 maybeFloat.value!.roundToDecimals(2)在调用代码中明确不安全的强制展开,而不是将其隐藏在实现中。

关于ios - 如何扩展 RealmOptional 以在 Swift 中的 Float 上添加一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34469827/

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