[英]Swift - Not enough bits to represent the passed value
下面的代碼在 iOS 設備和 watchOS 模擬器上運行良好。
static func getEventDateTime(startDateTime: Date?) -> String {
if let startDateTime = startDateTime {
let startTimeInMillis = Int(startDateTime.timeIntervalSince1970 * 1000)
let fiveMinutesInMillis = 300000
let eventStartDateTime = Date(timeIntervalSince1970: TimeInterval((startTimeInMillis-fiveMinutesInMillis)/1000))
return convertDateToString(eventStartDateTime)
}
return ""
}
但是,當我在 Apple Watch Series 3 上運行它時,出現以下錯誤: double value cannot be converted to int because the result would be greater than int.max
on line let startTimeInMillis = Int(startDateTime.timeIntervalSince1970 * 1000)
。
所以我改變了let startTimeInMillis = Int(startDateTime.timeIntervalSince1970 * 1000)
let startTimeInMillis = Int64(startDateTime.timeIntervalSince1970 * 1000)
和
let eventStartDateTime = Date(timeIntervalSince1970: TimeInterval((startTimeInMillis-fiveMinutesInMillis)/1000))
let eventStartDateTime = Date(timeIntervalSince1970: TimeInterval((Int(startTimeInMillis)-fiveMinutesInMillis)/1000))
。
現在我收到以下錯誤:沒有足夠的位來表示在線傳遞的值let eventStartDateTime = Date(timeIntervalSince1970: TimeInterval((Int(startTimeInMillis)-fiveMinutesInMillis)/1000))
如何更改功能以使其在 Apple Watch Series 3 或 watchOS 7 上運行?
更新功能代碼:
static func getEventDateTime(startDateTime: Date?) -> String {
if let startDateTime = startDateTime {
let startTimeInMillis = Int64(startDateTime.timeIntervalSince1970 * 1000)
let fiveMinutesInMillis = 300000
let eventStartDateTime = Date(timeIntervalSince1970: TimeInterval((Int(startTimeInMillis)-fiveMinutesInMillis)/1000))
return convertDateToString(eventStartDateTime)
}
return ""
}
使用 Calendar API 添加/減去時間單位(不支持毫秒,但支持納秒,可以從中轉換): https ://developer.apple.com/documentation/foundation/calendar。
func getEventDateTimeCal(startDateTime: Date?) -> String {
if let startDateTime = startDateTime,
let date = Calendar.current.date(byAdding: .minute, value: -5, to: startDateTime) {
return convertDateToString(date, startDateTime)
}
return ""
}
但是,如果您不需要毫秒精度,請從 TimeInterval 中減去秒。 請注意, TimeInterval是typealias TimeInterval = Double
並且始終表示秒。
func getEventDateTime(startDateTime: Date?) -> String {
if let startDateTime = startDateTime {
let fiveMinutesInSeconds = 5.0 * 60
let eventStartDateTime = Date(timeIntervalSince1970: startDateTime.timeIntervalSince1970 - fiveMinutesInSeconds)
return convertDateToString(startDateTime, eventStartDateTime)
}
return ""
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.