以下是代码:
class Person {
}
func lastNameForPerson(person: Person, caseFolding: ((String)->(String))? = nil) -> String {
if let folder = caseFolding {
return folder("Smith")
}
return "Smith"
}
print(lastNameForPerson(Person())) // Prints "Smith"
print(lastNameForPerson(Person()) {$0.uppercaseString}) // Prints "SMITH"
if "SMITH" == lastNameForPerson(Person()) {$0.uppercaseString} {
print("It's bob")
}
期待得到“这是鲍勃”。但反而得到了错误:
连续的陈述必须用新行分隔
答案 0 :(得分:6)
你必须在函数调用周围添加括号:
if "SMITH" == (lastNameForPerson(Person()) {$0.uppercaseString}) {
print("It's bob")
}
或者你以C风格的方式将它们放在==
比较(if
条件附近)周围:
if ("SMITH" == lastNameForPerson(Person()) {$0.uppercaseString}) {
print("It's bob")
}
或者,您可以在参数列表中移动闭包(虽然这需要您明确命名参数):
if "SMITH" == lastNameForPerson(Person(), caseFolding: {$0.uppercaseString}) {
print("It's bob")
}
出现此问题的原因是if
声明'声明' {}
块,即它不再属于lastNameForPerson
调用。对于编译器,第二个代码块现在看起来像一个正常的块,它与前一个(if
)语句没有正确分开。
你应该考虑避免使用这样的结构,因为它可能很难阅读(起初)。相反,您可以将函数调用的结果存储在变量中,并将其进行比较:
let lastName = lastNameForPerson(Person()) {$0.uppercaseString}
if "SMITH" == lastName {
print("It's bob")
}
答案 1 :(得分:1)
将您的函数调用放在括号中:
if "SMITH" == (lastNameForPerson(Person()) {$0.uppercaseString}) {
否则==
运算符优先,编译器将其计算为
if ("SMITH" == lastNameForPerson(Person())) {$0.uppercaseString} {
这是无效的代码。