是否可以使用模式匹配与三元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()方法:
但您可以使用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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。