【问题标题】:Expression pattern of type Int cannot match values of type (int) -> IntInt 类型的表达式模式不能匹配 (int) -> Int 类型的值
【发布时间】:2017-11-22 08:57:46
【问题描述】:

下面的代码对“Case”旁边的每个值都给出了错误,“Int 类型的表达式模式无法匹配 (int) -> Int 类型的值”。我真的不知道怎么给这个。我在想我必须将 Int 更改为另一种类型。我尝试了一些选项,但没有清除错误。传递给变量比较率的值是一个双精度值。

     var comparisonRate: Double = 0
        switch IRDComparisonTerm {
        case 12:
            comparisonRate =  oneYear

        case 24:
            comparisonRate =  twoYear
        case 36:
            comparisonRate =  threeYear
        case 48:
            comparisonRate = fourYear
        case 60:
            comparisonRate = fiveYear

        default:
            comparisonRate = 0

        }

【问题讨论】:

  • 也许 IRDComparionTerm 是可选的?尝试使用 IRDComparisonTerm!而是。
  • @Pochi 您对处理和 Optional 的第一反应应该是强制解包。

标签: ios swift


【解决方案1】:

正如错误提示的那样,IRDComparisonTerm 是一个接受 Int 参数并返回 Int 参数 ((Int) -> Int) 的函数。

你忘记调用函数了。

【讨论】:

    【解决方案2】:

    我让它工作了。一些编辑。我意识到我通过 switch 语句传递了错误的值。感谢您的答复。

      switch comparisonTerm {
            case 12:
             comparisonRate = oneYear
    
            case 24:
                comparisonRate =  twoYear
    
            case 36:
                comparisonRate =  threeYear
            case 48:
                comparisonRate = fourYear
            case 60:
                comparisonRate = fiveYear
    
            default:
                comparisonRate = 0
    
            }
    
            print(comparisonRate)
    

    【讨论】:

    • 这看起来是一种不必要的复杂方法来除以 12。
    • 到达 compareTerm 需要三个函数。 1. 确定到期日。 2 计算从今天到到期的月数。 3. 使用 switch 语句根据到期月数确定使用什么比较项。最后一步,根据比较项选择费率。
    • 哦,我以为您分配给comparisonTerm,而不是评分。顺便说一句,静态分析器可以证明comparisonRateswitch 语句的每个case 中都被赋值,因此您不需要提供初始值。您可以将comparisonRate 设为let 常量,并删除0 的初始赋值。
    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2016-10-25
    • 2013-05-23
    相关资源
    最近更新 更多