在 Swift 中使用 if let 赋值

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 notes 和 Swift Evolution proposal。

【讨论】:

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

以上是关于在 Swift 中使用 if let 赋值的主要内容,如果未能解决你的问题,请参考以下文章

IF 一个函数被赋值给一个使用 var 声明的变量和 let 有啥区别?

如何在OC中使用Swift如何在Swift中使用OC

OC与Swift的主要区别

Swift 中的 `let` 和 `var` 有啥区别?

Javascript 对象解构赋值是不是使用 const、let 或 var?

复合 let/const 赋值是啥意思?