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

时间:2015-10-22 09:56:02

标签: swift

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

请考虑以下示例:

$($(this).find("option")).filter(function() {return $(this).text() === y;})

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

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运算符,或者将来是否有可能。

2 个答案:

答案 0 :(得分:5)

在三元条件运算符的条件下,不能使用模式匹配。 但您可以使用选项的<style> .content { display: none; } </style> <div class="content"> <button>Show this button after first video ends</button> </div> <div id="player"></div> <script src="http://www.youtube.com/player_api"></script> <script> // create youtube player var player; function onYouTubePlayerAPIReady() { player = new YT.Player('player', { height: '390', width: '640', videoId: 'bWPMSSsVdPk', events: { 'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange } }); } // autoplay video function onPlayerReady(event) { event.target.playVideo(); } // when video ends function onPlayerStateChange(event) { if(event.data === 0) { alert('done'); } } </script> 方法:

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? 如果nilsomeString == nil返回NSURL(string:)

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

nil

答案 1 :(得分:2)

您不需要使用模式匹配来实现这一目标。

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

就我所知,尽可能接近使用三元运算符。