struct Parser<A> {
let parse: (String) -> (A,String)?
}
func character(condition:@escaping (Character) -> Bool) -> Parser<Character> {
return Parser(parse: {str in
guard let char = str.first, condition(char) else {
return nil
}
return (char,String(str.dropFirst()))
})
}
在上面的代码中,我很难弄清楚会发生什么。更具体地,
let char = str.first, condition(char)
吗?这甚至是合法的构想吗?代码必须按要求进行编译,但是发生了什么? let char = str.first
是一个赋值,condition(char)
是一个布尔值。如何分配赋值后加逗号,然后赋值布尔值。
答案 0 :(得分:1)
更具体的是,什么
let char = str.first, condition(char)
吗?
什么都没有。您的代码中没有这样的表达式。
这是什么:
guard let char = str.first, condition(char)
guard
发挥了所有作用。逗号通过嵌套连接两个条件,因此实际上是有效的(因为guard
是if
的一种形式):
if let char = str.first
和
if condition(char)
您肯定对这两者都足够了解吗?如果不是这样,if let
可能是您唯一不熟悉的东西,它对于Swift来说是极其重要的,并且易于学习。它可以安全地解开Optional,避免因尝试解开nil而崩溃的危险。