Swift 通用数值参数

Swift 通用数值参数,swift,numbers,Swift,Numbers,是否可以使用泛型将中的任何整数值转换为Double?我想让这个函数更方便一点,这样我就可以在这里插入任何数字,而不必将传入的hour和minute参数转换为double。主要是为了了解泛型,而不是其他任何东西 查找Double的最接近的东西是Double(确切地说是:T),但它给了我一个可选值,而我找不到任何既支持+和*运算符又允许我转换为Double的协议。如果可能的话,我不想创建自己的协议 这不起作用,但说明了我正在尝试做的事情: ///Returns a Date object for t

是否可以使用泛型将中的任何整数值转换为Double?我想让这个函数更方便一点,这样我就可以在这里插入任何数字,而不必将传入的
hour
minute
参数转换为double。主要是为了了解泛型,而不是其他任何东西

查找Double的最接近的东西是Double(确切地说是:T),但它给了我一个可选值,而我找不到任何既支持
+
*
运算符又允许我转换为
Double
的协议。如果可能的话,我不想创建自己的协议

这不起作用,但说明了我正在尝试做的事情:

///Returns a Date object for today set to a given time on a 24 hour clock
private func today<T: SignedInteger>(hour: T = 0, minute: T = 0, second: T = 0) -> Date {
    let secondsPastMidnight: Double = Double(exactly: hour)! * 60 * 60 + Double(exactly: minute)! * 60 + Double(exactly: second)!
    return Date().startOfDay.addingTimeInterval(secondsPastMidnight)
}
为以下内容提供错误:
无法推断泛型参数“T”
Double(精确:)
如果整数不可精确表示,则失败 作为64位IEEE-754浮点数,即,对于大小上的整数, 在工作时间、分钟和时间上,这应该不是问题 秒。(事实上,它根本没有失败,这是事实)

或者,您可以通过最大有符号整数类型进行转换,例如

Double(Int64(hour))
返回最接近的可表示浮点数作为
非可选。

当我调用问题中的函数时,我得到一个
通用参数T无法推断
错误。(我已更新问题以显示呼叫)。我不确定为什么会出现这种情况,因为我的返回值不是泛型的。如果您在没有参数的情况下调用
today()
,那么编译器无法推断类型
t
,这与函数内部从
t
Double
的转换无关。您必须至少传递一个参数,例如
今天(秒:0)
啊,有意义的是,我将小时设置为非可选。感谢像
Double(确切地说:)
这样的书在我每次使用它时都会出现致命错误。你的选择很好。
Double(Int64(hour))