【问题标题】:constant 'result' inferred to have type (), which may be unexpected推断为具有类型 () 的常量“结果”,这可能是意料之外的
【发布时间】:2015-07-14 06:07:42
【问题描述】:
@IBAction func operate(sender: UIButton) {
   
     if let operation = sender.currentTitle {
         if let result = brain.performOperation(operation) {
    
            displayValue   = result
         }
         else {
            displayValue = 0.0
         }
    
    }
}

我是编码新手,请原谅我的编码格式和其他不一致之处。我一直在尝试斯坦福大学教授的 iOS 8 快速编程入门,但我遇到了修改后的计算器的问题。

我得到三个错误。第一个是快速编译器警告 - 在

if let result = brain.performOperation(operation)

它说

推断为具有类型 () 的常量“结果”可能出乎意料。

它给了我这样做的建议----

if let result: () = brain.performOperation(operation)

另外两个错误是

条件绑定中的绑定值在 if let result line 处必须是 Optional 类型

无法在“displayValue = result”处将 () 类型的值分配给 Double 的值

Here is the github link如果有人需要有关代码的更多信息。

提前致谢。

【问题讨论】:

  • 你的performOperation(:) 方法是什么样的?

标签: swift ios8


【解决方案1】:

从错误中猜测,我希望 performOperation() 应该返回 Double?(可选双精度),而实际上它什么也不返回。

即它的签名可能是:

func performOperation(operation: String) {
    // ...
}

..虽然实际上应该是:

func performOperation(operation: String) -> Double? {
    // ...
}

我这么认为的原因是这一行:if let result = brain.performOperation(operation) 被称为“解包可选”并且它期望分配的值是可选类型。稍后您将解包的值分配给似乎是 Double 类型的变量。

顺便说一句,更短(更易读)的写法是:

displayValue = brain.performOperation(operation) ?? 0.0

【讨论】:

  • 哇,谢谢它的工作。也忘了在performOperation函数后面加上return evaluate ()
【解决方案2】:

看起来brain.performOperation() 根本没有返回结果, 所以也没有可选值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多