我想检查字符串是否包含任何字符' a'' e',' i'' o&#39 ;或者' u'
我理解编写它的代码是:
let target : String = "monocle"
let ok : Bool = target.contains {"aeiou".contains($0)}
// more codes to use the Boolean value of variable 'ok'
任何人都可以解释代码第二行中实际发生的事情,即变量ok
的初始化吗?
编辑:更具体一点,我希望找出封闭内部实际发生的事情。感谢 Sweeper 的回答,我现在明白这意味着检查字符串target
,逐字符(使用简写参数名称$0
),对于任何字符& #39; a',' e',' i',' o'或者' u'
答案 0 :(得分:2)
首先需要理解"将闭包传递给方法的概念"因为这正是第二行发生的事情。
String.contains
可以接受Character -> Bool
类型的闭包。它将对字符串的每个字符应用闭包,并查看它返回的内容。如果闭包在应用于任何字符时返回true
,则contains
将返回true
。否则,false
。
这是你传递的关闭:
{"aeiou".contains($0)}
$0
表示第一个参数。它会检查传入的字符是否为aeiou
之一。因此,假设此闭包应用于要测试的字符串中的每个字符,当返回true
时,contains
将返回true
。