swift - "if let"尽管值为 nil 仍执行语句

标签 swift option-type

尽管“let”部分为零,但我有一个正在执行的“if let”语句。

if let leftInc : Double? = self.analysis.inputs[self.btnLeftIncisor.dictionaryKey!]! {
    println(leftInc)
    let valueString : String = formatter.stringFromNumber(NSNumber(double: leftInc!))!
    self.leftIncisorTextField?.text = valueString
    self.btnLeftIncisor.associatedLabel?.text = valueString
}

// self.analysis.inputs is a Dictionary<String, Double?>

输入字典保存用户输入的信息 - 要么是数字,要么是 nil(如果用户尚未在匹配字段中输入任何内容)。

在以前版本的Swift下,代码是这样写的:

if let leftInc : Double? = self.analysis.inputs[self.btnLeftIncisor.dictionaryKey!]?? {

并且工作正常。

我看到了类似的问题here ,但在这种情况下,问题似乎是使用 Any? 的结果,但这里的情况并非如此。

最佳答案

swift 2.2

if let 中,您定义了另一个可选值,这就是为什么 nil 是合法的情况。 if let 主要用于从可选值中提取(也许)非可选值。 您可以尝试:

if let leftInc : Double = self.analysis.inputs[self.btnLeftIncisor.dictionaryKey!].flatMap ({$0}) {
   // leftInc is not an optional in this scope
   ...
}

无论如何,我会考虑不将其作为单行,而是利用guard案例。只是为了增强可读性。并避免 bang 运算符 (!)。

关于swift - "if let"尽管值为 nil 仍执行语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30377703/

相关文章:

ios - 如何将 UIView 放入 UITableView 并将其固定在底部

swift - 扩展 对于除一种类型之外的所有类型都是可选的

Java Util 可选代码到 Guava 可选映射和过滤器

java - 从 Java 访问 scala.None

ios - 当对象存在时获取 EXC_BAD_ACCESS

objective-c - 从 objective-C 桥接到 swift 时,swift 编译器如何识别变量是副本还是强变量?

ios - 使用广播 UI 扩展显示 UI(可能是 Storyboard)

xcode - fatal error : unexpectedly found nil while unwrapping an Optional value (lldb)

lambda - 如何使用Optional仅使用高阶函数来检查Web服务的返回是否为null并避免noSuchElementException

ios - PDFDocument 未从 URL 加载文件