错误消息:初始化器有条件的结合必须有可选的类型,而不是“()”

问题描述:

我得到错误:错误消息:初始化器有条件的结合必须有可选的类型,而不是“()”

initialiser for conditional binding must have optional type, not '()'.

使用雨燕的语言,下面是代码:

if let result = brain.performOperation(operation) 
+0

我是编程新手,所以任何反馈都会很棒。谢谢 – jd1122

+0

您可能需要显示更多的代码,比如brain.performOperation返回的内容,我假设它是一个void。此外,这看起来非常熟悉(cs193p?),如果知道该类的版本是基于swift 1.0,所以如果您使用任何版本的xcode高于6.2(我认为) – nPn

+0

func performOperation(符号:字符串)如果让操作= knownOps [symbol] { opStack.append(operation) } } – jd1122

我想我可以回答你的问题,但我不知道它对你有多大帮助。

使用if let someVar = someOptional { }的方法是检查变量的值(someOptional)以查看它是否为零或“值”。如果不是零,那么someVar将被赋予someOptional的非零值,并执行{ }之间的代码,该代码可以安全地引用someVar,因为它知道它不是零。如果某些可选项为零,则{}内的代码将被绕过并不会执行。

你上面贴的评论表明performOperation()方法是这样的:

func performOperation(symbol:String) { 
    if let operation = knownOps[symbol] { 
    opStack.append(operation) 
    } 
} 

此方法不返回任何东西,或者更正式它又名()返回void。无效,或()不是一个值,也不是零。

所以,当你有这样的说法

if let result = brain.performOperation(operation) { }

编译器会抱怨,因为它预计brain.performOperation(operation) 返回nil或者一个值,但并非无效又名()这正是该方法返回。

如果您仍然对可选项感到困惑,请务必阅读尽可能多的Swift Language Reference。选择权是该语言的重要组成部分,一旦你习惯了他们,你会发现它们非常宝贵。

+0

感谢您的反馈。 – jd1122