Ok,它很安全,不会出现nil,问题是nil真的有这么可怕么?一用问号,代码后面都要用问号或者惊叹号,带来的繁琐是不是更麻烦呢?
你怎么看这个问题?
我也一直不理解为什么要用这个Optional。
不是好事儿。想做的完美,可惜就是没有考虑过用得人的感觉。
个人非常讨厌optional这种东西,一般有点经验的人都会自己检查nil的吧,没必要这样搞,反而觉得很麻烦
3楼 @nobuta 现在很多接口返回值都搞成了optional,怎么解决这个问题?
4楼 @netdigger 按照它那个规则,不搞成optional都不行
写一段代码比较一下使用 Optional 和 不用 Optional 显式写 nil 判断,应该就很清楚了。Optional 的 composability 更好吧。
6楼 @peterwang 这个倒是无所谓,但是带来的每行代码里面都有问号或者惊叹号,好令人困扰啊
@tinyfool 这个 Optional type 是借鉴自 Haskell 的 Maybe,你有兴趣的话可以看看在 Haskell 中 Maybe [1] 是如何改进代码的可读性和可组合性的,我觉得背后的动机是一样的。
[1] http://book.realworldhaskell.org/read/monads.html
就近几个月的 swift 使用上来说,我觉得是好事。
不过 optional 也会带来坑,比如对值为 nil 的optional 值使用强制解包的 ! 操作符会导致程序 crash。特别是对 swift 还不熟悉的新手来说经常范这样的错误。
总的来说,感觉 swift 写起来的爽快程度要比 objc 好很多。
4楼 @netdigger 官方接口返回optional的话,你只有老老实实检查咯,自己写接口还是应该遵循规则可能为空老老实实返回optional,哈哈,虽然很烦
protocol里的option接口也得用感叹号来调用,扯
看了半天,最终还是觉得是扯淡的设计。 感觉只有在链式调用的时候,还简洁点儿。
Java 8里面也加入了Optional. 至于为什么要用这个,代码写多了就知道了。
好事. 近几年流行的语言都带了Option
14楼 @牛牛跳水 哦?都类似么?
15楼 @tinyfool 原理类似,都是Some(T)和None. 只是Swift的?语法和!语法更好用
和scala的Option[T]类似的吧? 不只是空检查的替代 这个玩意儿是可组合的 有map foreach等等方法 那就不用像以前那样写一堆的if了... 而且还可以用模式匹配
swift里也应该类似吧...