可选型以及字符串插值
你遇到过这个问题吗?想要在 UI 中显示一个可选值或将其打印到控制台以便调试,但是你不喜欢可选值转成字符串的默认格式: var someValue: Int? = 5 print("The value is (someValue)") // → "The value is Optional(5)" someValue = nil print("The value is (someValue)") // → "The value is nil" 在字符串插值中使用可选值可能会导致意想不到的结果当你 在字符串插值中使用可选值 的时候,实际上 Swift 3.1 会发出一个警告,因为这种行为会产生意外的结果。这是 Julio Carrettoni、Harlan Haskins 和 Robert Widmann 提出有关 Swift 演化的论点:
该警告已经在最新的 Swift 开发快照(2016-12-01)中实现:
你有几种方式来消除这个警告:
多数情况下我真的不喜欢任何一种,但这已经是编译器可以提供的最好的方案了。第三种方案的问题是使用 空值合并操作符 自定义一个可选型的字符串合并运算符为了解决这个问题,我自定义了一个可选型的字符串合并操作符。我觉得给它取名为 infix operator ???: NilCoalescingPrecedence public func ???<T>(optional: T?,defaultValue: @autoclosure () -> String) -> String { switch optional { case let value?: return String(describing: value) case nil: return defaultValue() } }
或者,使用 [ public func ???<T>(optional: T?,defaultValue: @autoclosure () -> String) -> String { return optional.map { String(describing: $0) } ?? defaultValue() } 两种实现完全相等。你喜欢哪一种版本取决于个人口味以及你的代码风格。我不认为哪一个会显得更清晰。 还有最后一件事我认为需要提醒一下,你必须在 应用让我们使用 var someValue: Int? = 5 print("The value is (someValue ??? "unknown")") // → "The value is 5" someValue = nil print("The value is (someValue ??? "unknown")") // → "The value is unknown" 这只是个小玩意,但我真的很喜欢它。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- VueJs使用Amaze ui调整列表和内容页面
- Flashback Version Query && Flashback Transac
- ajax – Googlebot如何知道网络服务器在请求`?_escaped_fr
- ajax跨域请求结合springmvc后台代码学习整理
- ruby – Redis gem中的“Invisible”实例方法
- c# – MVC在Post上渲染动作
- c# – 我怎么能让Resharper或Intellisense知道一个方法allw
- xml 软件校验
- cocos2dx3.2 xcode代码块啊,气死自己的类名,低级的错误何
- cocos2dx之抽奖界面与获奖概率的设计(一)