swift – 使用与三元if运算符匹配的模式

是否可以使用模式匹配与三元if运算符?

请考虑以下示例:

let someString: String? = ...

if let embedURL = embedURL {
    return NSURL(string: embedURL)
} else {
    return nil
}

这很冗长.我希望能够做到这样的事情:

return let someString = someString ? NSURL(string: someString) : nil

要么

return case let .some(someString) = someString ? NSURL(string: someString) : nil

但编译器不接受这一点.我知道我可以为NSURL添加一个初始值设定项,它接受可选的字符串,使用普通的if语句或甚至是switch语句,但我想知道是否可以使用三元if运算符,或者是否可以使用指出未来.

解决方法

您不能在三元条件运算符的条件下使用模式匹配.
但您可以使用optionals的flatMap()方法

/// Returns `nil` if `self` is nil,`f(self!)` otherwise.
public func flatMap<U>(@noescape f: (Wrapped) throws -> U?) rethrows -> U?

在你的情况下:

let someString: String? = ...
let url = someString.flatMap { NSURL(string: $0) }

表达式的类型是NSURL ?,它的计算结果为nil
如果someString == nil或NSURL(string :)返回nil.

正如@Cosyn注意到的那样,最后一行也可以写成

let url = someString.flatMap(NSURL.init)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...