Swift NSUserDefaults 第一次为零

标签 swift nsuserdefaults

您好,我的应用程序在我第一次运行时崩溃了。这是我的代码:

 let State = save.stringForKey("StateSave")
 let City = save.stringForKey("CitySave")
 let Vehicle = save.stringForKey("ModelNumberSave")
 let ExtensionPeriod = save.stringForKey("ExtensionPeriodChoosed")
 let Location = "Location"


 if ExtensionPeriod == nil {
      let name = ""
      var FieldChoosed: Void = save.setObject(name, forKey: "ExtensionPeriodChoosed")
      save.synchronize()

 }

 save.synchronize()
 var DetailNames = ["\(State!)","\(City!)","\(Location)","\(Vehicle!)","\(ExtensionPeriod!)"]

我在这一行得到了一个nil:

var DetailNames = ["(State!)","(City!)","(Location)","(Vehicle!)","(ExtensionPeriod!)"]

事实上 ExtensionPeriodnil。但是我不明白为什么... ExtensionPeriodnil,但是用我写的代码,ExtensionPeriod 会像""所以它是不是 nil。请帮助我。

最佳答案

stringForKey 在没有保存值时返回 nil

您需要给您的值一个默认值。最简单的方法是使用 ?? 运算符,将 nil 替换为另一个值:

let State = save.stringForKey("StateSave") ?? "-"

一些一般性建议:你需要停止使用 ! 这么多。通常当某些东西返回 nil 时,这是有充分理由的——它可能是 nil。当你用 ! 解开它时,你的程序会崩溃(关于原因的有用信息不多)。同样,如果您将值与 nil 进行比较,这通常是一个不好的迹象。

相反,看看 this list一些替代品的可选处理技术。

关于Swift NSUserDefaults 第一次为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252369/

相关文章:

multithreading - 纯 Swift 并发

ios - 如何在 Swift 中显示框架(SDK)中的 View Controller ?

ios - 以两个手指之间的点为中心缩放 UIImageView

ios - 在 Swift 中将自定义对象保存到 NSUserDefaults

ios - ViewWillDisappear 导航/选项卡 Controller 的 nil 值

ios - 我如何模仿 map 应用程序的底部工作表?

swift - 如何避免这种 Force Cast

iOS - UserDefaults 源文件替换

ios - WatchKit NSUserDefaults 为空

swift - 在 UITableView 行中保存按钮的选择状态 (Swift)