【问题标题】:Usage of where in if let assignment in Swift在 Swift 中使用 if let 赋值
【发布时间】:2016-12-10 07:00:24
【问题描述】:

Swift 手册第 61 页的 Swift 文档提示可以使用 where 来加入带有常规条件的可选绑定。然而,当我这样做时,我会收到一条警告,建议我将where 替换为以下代码中的逗号:

if let geocodingError = error as? NSError where geocodingError.code == 2

【问题讨论】:

    标签: ios swift where optional swift3


    【解决方案1】:

    在 xcode 9 中

    if let str = textField.text as String!, !str.isEmpty
    {
       params[key] = str
       TextFieldHelper.setup(textField: textField)
    }
    else
    { 
       TextFieldHelper.error(textField: textField)
    }
    

    【讨论】:

    • 澄清一下:决定可用语法的是 Swift 语言的版本,而不是 Xcode 的版本。
    【解决方案2】:

    两个条件的例子

    if let x = y, let a = b, a == x && !x.isEmpty {
    

    【讨论】:

      【解决方案3】:

      在 Swift 3 中,这种语法发生了变化。

      是什么

      if let x = y, a = b where a == x {

      现在

      if let x = y, let a = b, a == x {

      理由是if ... { 的每个子句现在都是独立的布尔测试。

      有关此更改的更多信息,请参阅 Xcode Release notesSwift Evolution proposal

      【讨论】:

      • 又一个变化。在文档的任何地方,where 子句仍然存在。无论如何,使用您建议的表格可以正常工作。
      • 除了(不完全公开的)Xcode 8 Beta 4 发行说明之外,是否在其他任何地方描述了此更改?例如。进化/其他官方文档?我可能会向其他读者指出,如果使用例如IBM Sandbox 中的 Swift 3.0-dev。
      • 更新到 Swift 3 的文档仍然有 where 以及在线文档。说这令人困惑是轻描淡写的。现在看来他们只是为了它而改变事物,例如 DispatchQueue 现在需要截止日期而不是何时。
      • @Grimxn 好吧,这是你的答案 ;) 我一般不喜欢在未经他们许可的情况下编辑其他人的答案,除非它与语法相关——尽管我已应你的要求编辑了链接。跨度>
      猜你喜欢
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      相关资源
      最近更新 更多