Swift 4:使用contains检查字符串元音字符及闭包执行逻辑问询
解释Swift中
target.contains { "aeiou".contains($0) }的闭包执行逻辑 嘿,我来一步步拆解这行代码里闭包的执行过程,帮你彻底搞明白~
首先得铺垫个基础:Swift里String的contains(_ predicate: (Character) throws -> Bool)方法,本质是个遍历检查器——它会逐个取出目标字符串里的每个字符,把字符传给你写的闭包,只要闭包对任意一个字符返回true,整个contains方法就直接返回true,不用再遍历剩下的字符了(这叫短路求值,能省点性能)。
接下来看你代码里的核心闭包{ "aeiou".contains($0) }:
$0是Swift闭包的简写参数名,这里它代表当前正在被遍历的target字符串里的单个字符(比如你的target是"monocle",第一个遍历到的就是'm',然后是'o',依此类推)- 每次拿到
$0,闭包就会执行"aeiou".contains($0)——说白了就是检查这个当前字符是不是在元音字母集合里 - 具体到你的例子
target = "monocle",执行流程是这样的:- 取出第一个字符'm',传给闭包,检查"aeiou"里有没有'm'?没有,闭包返回
false,继续遍历下一个字符 - 取出第二个字符'o',传给闭包,"aeiou"里明确有'o',闭包返回
true - 这时候
target.contains(...)直接停止遍历,返回true,把这个值赋值给ok变量
- 取出第一个字符'm',传给闭包,检查"aeiou"里有没有'm'?没有,闭包返回
简单总结:这行代码就是逐个检查target的字符,只要找到任意一个元音字母,就把ok设为true,否则为false。
内容的提问来源于stack exchange,提问作者penangite
相关产品推荐
相关产品推荐

