swift - Swift 中的可选绑定(bind)语法

标签 swift option-type

一个tutorial on found I've found helpful不理解 Swift 的可选类型包含(“展开”部分中的最后一个示例)以下示例:

if let y: Int? = someObject.someInt() {
    println(double(y))
} else {
    println("No value to double!") // prints "No value to double!"
}

但这似乎并没有按预期工作。这里的意图不是更像

if let y = someObject.someInt() {
    println(double(y))
} else {
    println("No value to double!") // prints "No value to double!"
}

这两个版本不一样,是吗?如果不是,我想更好地了解每种方法的工作原理。特别是:这两段代码有什么区别?

最佳答案

它们是不同的。

for if let y: Int? = someObject.someInt(), y 的类型为 Int?,并且赋值总是成功,因此它总是执行第一个 block 而不是 else block ,即使当返回值为nil

对于 if let y = someObject.someInt()y 首先解包并具有类型 Int

  1> func foo(a:Int?) -> Int? { return a }
  2> if let y = foo(nil) { println(y) } // can't assign `nil` to Int
  3> if let y = foo(1) { println(y) } // y is Int
1
  4> if let y : Int? = foo(1) { println(y) } // y is Optional<Int>
Optional(1)
  5> if let y : Int? = foo(nil) { println(y) } // it is still executed because it is ok to assign `nil` to `Int?`
nil

关于swift - Swift 中的可选绑定(bind)语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26169828/

相关文章:

ios - 如何区分用户是快速点击 UIButton 还是在 Swift 中放置并按住它?

json - 如何获取json值

swift - 可选类型 'UIColor?' 的值必须解包为类型 'UIColor' 的值

java - 在 lambda 表达式中分配局部变量

C++17可选树,错误: invalid use of incomplete type

ios - [AnyObject] ?' does not have a member named ' 下标'

ios - 在 Stripe iOS 实现中调用 Add Token 委托(delegate)后的过程是什么?

ios - UIImage 转换为数据并返回更改大小?

SwiftUI 列表选择始终为零

ios - 为什么我得到一个 "Value of optional type UIFont not unwrapped",但解包给出 "unexpectedly found nil while unwrapping an optional"?