【问题标题】:How to safely force unwrap time in dictionary如何在字典中安全地强制展开时间
【发布时间】:2020-04-28 01:22:37
【问题描述】:

我有一个问题。我有一个字典类型 [String: Any]

我的代码是

dict["start"] = "\(start.hour!):\(start.minute!)"
if let end = end {
    dict["end"] = "\(end.hour!):\(end.minute!)"
}

但是当我使用 swiftlint 时,它会给我一个强制解包错误。必须保存价值,所以如果 let 在这里不好:)

【问题讨论】:

  • start和end有什么类型的变量?
  • 不,字符串没有小时和分钟属性。它是您自己创建的类型,还是来自框架或类似的类型?
  • 对不起。它的日期组件
  • 如果您在DateComponents 中同时指定了hourminute,则强制展开是1000% 安全的。 SwiftLint 吹毛求疵。
  • 所以我应该添加一个 swiftlint 忽略并继续前进? :) 好的,谢谢 :)

标签: swift dictionary swiftlint forceunwrap


【解决方案1】:

这主要是一个语义问题,但你可以这样做:

if let startHour = start.hour,
   let startMinute = start.minute {

    dict["start"] = "\(startHour):\(startMinute)"

    if let end = end,
       let endHour = end.hour,
       let endMinute = end.minute {

       dict["end"] = "\(endHour):\(endMinute)"
    }
}

...或类似的东西——因为 Swift 中有多种方法可以安全地解开可选项。

【讨论】:

    【解决方案2】:

    您可以尝试以下演示代码。希望对你有帮助。

    import Foundation
    
    let calendar = Calendar.current
    
    let dateComponents = DateComponents(hour: 12, minute: 20, second: 55)
    
    func getHoursMinutesFrom(time: DateComponents) -> (hour: Int,minute: Int) {
        switch (time.hour, time.minute) {
        case let (.some(hour), .some(minutes)):
            return (hour,minutes)
        default:
            return (0,0)
        }
    }
    
    print(getHoursMinutesFrom(time: dateComponents))
    

    【讨论】:

    • 这并没有多大帮助,因为它不使用字典,但无论如何感谢 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2018-07-17
    相关资源
    最近更新 更多