【问题标题】:Swift - Unwrapped string still displaying as OptionalSwift - 未包装的字符串仍显示为可选
【发布时间】:2017-03-26 06:19:27
【问题描述】:

我使用 Swift 已经有一段时间了,但我仍然每天都在努力理解 optionals。这是我目前最难掌握的。

我无法解开此 UserDefaults 值以不包括 Optional() 环境。

存储价值

globals.defaults.set(String(describing: cardView.backgroundColor), forKey: "bgColor")
print(String(describing: cardView.backgroundColor!))
//print this: UIExtendedGrayColorSpace 1 1

读取值

let tValues = def.string(forKey: "bgColor")!.components(separatedBy: " ")
print(tValues)
//print this: Optional(UIExtendedGrayColorSpace", "1", "1)

defUserDefaults.standard 的一个实例。如您所见,我在阅读密钥时强制解开密钥。我已经尝试在那里以及print(tValues)! 尝试这样做。但它们产生相同的结果。

我如何摆脱Optional()

【问题讨论】:

  • backgroundColor 是一个 optional 属性,因此String(describing: cardView.backgroundColor) 给出字符串“Optional(UIExtendedGrayColorSpace 1 1)”。在将颜色保存为默认值时,您不要解开颜色。
  • 当我打印String(describing: cardView.backgroundColor) 时,它不是可选的。请参阅我在 存储价值 部分中的评论
  • 在您的 print 语句(第二行)中打开颜色。但不是在您将颜色存储到默认值的第一行。
  • @MartinR 做到了,谢谢。我确信我已经尝试过了。

标签: swift swift3


【解决方案1】:

选项可以保护我们免受 Swift 中 nil 值的可能性的影响。它们可能很难缠住你的脑袋,有时也很难处理,但可以将它们视为防止程序崩溃的盾牌。 从不强制展开。 通常有更好的方法。

尝试安全地解开您的 UserDefaults 对象,然后打印它。这样的事情应该使用if let 块。

if let tValues = def.string(forKey: "bgColor"){ //def.string(forKey: "bgColor") is now safely unwrapped print(tValues.components(separatedBy: " ")) }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多