是否可以使用与三元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
运算符,或者将来是否有可能。
答案 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?
如果nil
或someString == nil
返回NSURL(string:)
。
正如@Cosyn注意到的那样,最后一行也可以写成
nil
答案 1 :(得分:2)
您不需要使用模式匹配来实现这一目标。
return someString != nil ? NSURL(string: someString!) : nil
就我所知,尽可能接近使用三元运算符。