通用数字参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通用数字参数相关的知识,希望对你有一定的参考价值。

是否可以使用泛型将任何整数值转换为Double?我想让这个功能更方便,所以我可以在这里堵塞任何数字,而不必转换我传入双打的hourminute参数。主要是为了让我更了解仿制药。

看看Double的documentation,我能找到的最接近的东西是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)
}

像这样调用上面的内容:

let superEarlyMeeting = Meeting(UUID: "0", startTime: today(), endTime: today(hour: SharedGlobals.Calendar.WORK_HOURS_START))

给出错误:Generic parameter 'T' could not be inferred

答案

如果整数不能完全表示为64位IEEE-754浮点数,即Double(exactly:)的整数,则greater or equal to 9,007,199,254,740,993会失败,这在使用小时,分钟和秒时不应该成为问题。 (实际上它根本没有失败,这是is a bug)。

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

Double(Int64(hour))

它返回最接近的可表示浮点数作为非可选。

以上是关于通用数字参数的主要内容,如果未能解决你的问题,请参考以下文章

DbArithmeticExpression 参数必须具有数字通用类型

通用数字参数

Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段

如何使用滚动片段容器实现通用布局?

第四篇 函数

10个JavaScript代码片段,使你更加容易前端开发。