swift - 如何避免这种 Force Cast

标签 swift nsuserdefaults

我认为我在我的应用程序中强制转换导致它崩溃,(userDefaults.value(forKey: "timeDiffSecondsDefault") as! Int?)...但我真的不知道如何避免它.非常感谢任何指导!

func getProductionTime(store: Bool = false) {

    let userDefaults = UserDefaults.standard

    let productionTimeFormatter = DateFormatter()
    productionTimeFormatter.timeZone = TimeZone(abbreviation: defaultTimeZone)
    productionTimeFormatter.dateFormat = defaultTimeFormat

    if let defaultTimeDiffSeconds: Int = userDefaults.value(forKey: "timeDiffSecondsDefault") as! Int? {
        timeDiffSeconds = defaultTimeDiffSeconds
    }
    let productionTime = Calendar.current.date(byAdding: .second, value: timeDiffSeconds, to: Date())!
    if store {
        storeDateComponents(nowProdTime: productionTime)
    }
    productionTimeString = productionTimeFormatter.string(from: productionTime)
    liveCounterButton.setTitle(productionTimeString, for: .normal)

}

最佳答案

使用返回非可选的专用 API

timeDiffSeconds = userDefaults.integer(forKey: "timeDiffSecondsDefault")

如果需要默认值 != 0 register


注意:永远不要将 value(forKeyUserDefaults 一起使用,除非你真的需要 KVC

关于swift - 如何避免这种 Force Cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53197565/

相关文章:

iphone - 我们可以更新存储在 NSUserDefault 中的数组吗

ios - 如何跟踪 UICollectionView 索引

swift - 在重新加载 TableView 之前完成了两个服务器请求

ios - 使用 storyboardID 检测首次启动

iphone - NSUserDefaults 问题(如何在启动应用程序时需要时打开不同的 viewController)

arrays - 在 Swift 2.2 中附加数组时使用 'subscript' 不明确

iphone - 我应该使用 NSUserDefaults 还是 plist 来存储数据?

swift - 在 Swift 的枚举属性的 didSet 中,是否可以检查新值是否与旧值相同?

ios - 在 SWIFT 中制作合法的倒数计时器

ios - ImageView 不会更新新图像