Swift optional 类型真烦,写了一个月 swift 了还有点搞不清?和!

2016-09-27 11:47:08 +08:00
 ldehai
6156 次点击
所在节点    iDev
41 条回复
ChefIsAwesome
2016-09-27 11:51:41 +08:00
貌似就是个 maybe monad 。真羡慕自带这种东西的语言。
isweal
2016-09-27 11:56:04 +08:00
let advertCount = self.cvsAdvertModel?.infos?.ref(0)?.imgs?.count ?? 0
感受一下
ldehai
2016-09-27 11:57:50 +08:00
@isweal 太烧脑子了
xiaoc19
2016-09-27 11:59:23 +08:00
你不如花个 5 分钟仔细思考他们的区别 再写。。。。
其实很简单
congeec
2016-09-27 12:08:41 +08:00
你要是用 rust ,写一大堆 match, unwrap, try!()就知道有多烦了。这是好东西
kera0a
2016-09-27 12:19:46 +08:00
我一开始也挺烦这些的,现在用习惯了发现是神器啊
比如这位兄弟提到的例子
@isweal
let advertCount = self.cvsAdvertModel?.infos?.ref(0)?.imgs?.count ?? 0

如果没有 optional ,取 advertCount 要这样
if(self.cvsAdvertModel != nil ){
if( ...infos? != nil){
if( ...ref(0) != nil ){
if
if
}
}
}

而 optional 写法
if let advertCount = self.cvsAdvertModel?.infos?.ref(0)?.imgs?.count {

}
else{
let advertCount = 0;
}

当然还有其他很多用法,理解下其实挺爽的
ldehai
2016-09-27 12:29:14 +08:00
其实我就是懒,刚硬着头皮去看了 apple 的文档,有点开窍了。磨刀不误砍柴功,真理 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html
yjxjn
2016-09-27 12:42:10 +08:00
stackoverflow 上面有关于 optional 的解释,仔细看看,多读几遍,今天看不懂,明天继续看,总会看懂的,当初我也没明白,感觉傻逼一样的类型,用顺手之后,发现真的很好用!
SOW 地址:
http://stackoverflow.com/questions/24003642/what-is-an-optional-value-in-swift
zythum
2016-09-27 13:04:28 +08:00
这个挺好的呀。真的是个好东西
zacard
2016-09-27 13:15:12 +08:00
好用的语法糖,超甜
zhuangzhuang1988
2016-09-27 13:25:08 +08:00
C#早就有了..
Troevil
2016-09-27 13:33:12 +08:00
你是没看到 java 的 optional , 就算现在有了 optional 类型 还是惨不忍睹 超级难用
ldehai
2016-09-27 13:44:45 +08:00
@zythum 我是觉得它可以设计的更友好一点,不要我去想着这是个 optional ,我要加?才行。要是编译器自己能自动判断最好了。
subpo
2016-09-27 13:58:15 +08:00
看起来 ruby 的?和!不同
zhuangzhuang1988
2016-09-27 13:59:06 +08:00
推荐看这个 http://codon.com/refactoring-ruby-with-monads
怎么把
这个

简化成


怎么把
这个

简化成


就知道 optional(monad)的作用了..
ldehai
2016-09-27 14:07:24 +08:00
@zhuangzhuang1988 这个设计的好,不用加任何?和!,没心理负担
jackisnotspirate
2016-09-27 14:17:35 +08:00
「不要我去想着这是个 optional ,我要加?才行」现在 Swift 3 里面 ! 表示 Implicitly Unwrapped Optional, 就是你想要的了。
tabris17
2016-09-27 14:18:50 +08:00
新手觉得烦,老鸟觉得简直救命
xjbeta
2016-09-27 15:41:24 +08:00
反正别用强制解包(万恶之源 各种崩溃都和这玩意有关) 多写个 if let 。。。。
littleshy
2016-09-27 15:49:20 +08:00
函数式语言的特性,用习惯了就爽!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/309245

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX