簡體   English   中英

Swift - 沒有足夠的位來表示傳遞的值

[英]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 中減去秒。 請注意, TimeIntervaltypealias 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM