【发布时间】:2022-08-09 20:16:09
【问题描述】:
我想为支持 random(in:) 函数的 Swift Double、Int 和其他数字类型创建扩展,如下所示:
extension Double {
// function to generate multiple random numbers of type
static func random(in range: ClosedRange<Self>, count: Int) -> [Self] {
var values = [Self]()
if count > 0 {
for _ in 0..<count {
values.append(Self.random(in: range))
}
}
return values
}
}
如何在不为每种类型创建单独的扩展的情况下做到这一点?
-
你确定这值得吗?通常只写
(0...5).map { Double.random(in: 0...1) }之类的东西 -
顺便说一句,
if声明没有做任何事情。如果count是0,那么0..<count是一个空范围,这已经使for循环什么也不做。 -
谢谢你的第二点。在第一点,这是我的实现,但我得到了这个错误:无法将类型 \'() -> Double\' 的值转换为预期的参数类型 \'(ClosedRange<Int>.Element) throws -> Double\' (又名 \'(Int) 抛出 -> Double\')。因此,我将 Ints 转换为 Doubles,然后生成了 Doubles 数组,但认为这看起来很糟糕。
-
哦,我记得在第二点上,我想满足 count 的负值,即为小于 1 的值返回一个空数组。
-
我认为您可以通过将前提条件移至函数的第一行来更清楚地表达该意图:
guard count > 0 else { return [] }。至于您遇到的类型错误,能否请您显示您尝试过的确切代码?我只是在这里猜测,所以我无法复制您的错误
标签: swift generics integer double