举个简单例子
class Person { var headerImageUrl: String? }
func setHeaderImage() {
let person = Person()
if let imageStr = person.headerImageUrl, let imageUrl = URL(string: imageStr) {
headerImgV.sd_setImage(with: URL(string: imageUrl))
}
}
当给一个headerImgVSD一个图片的时候,取Person中的string并转换成URL,一般情况下会写两个let,但实际在if的代码中往往只用到最后一个let拿到的值,并且多次let在语句的写法上也比较冗余。
解决办法是每个需要解包的判断都可以用flatmap{}函数代替,写法上简便,用起来也方便。
func setHeaderImage() {
let person =Person()
if let imageUrl = person.headerImageUrl.flatMap({$0}).flatMap({URL(string: $0)}) {
headerImgV.sd_setImage(with:URL(string: imageUrl))
}
}
当if后面有多重let的时候这样用起来方便许多。
网友评论