无法匹配类型的值

时间:2016-12-12 14:30:18

标签: swift swift3

我刚刚开始使用Swift 3,我正在将一个Rails项目转换为swift(在我学习的同时进行项目)

相当简单,我有一个Rails语句Im转换和我在Xcode中得到很多红色错误:

std::tuple<double, vector<int>> t = std::make_tuple(0.0, vector<int>{1,3});

let startingPoint: Int = 1 let firstRange: ClosedRange = (2...10) let secondRange: ClosedRange = (11...20) func calc(range: Float) -> Float { switch range { case startingPoint: return (range - startingPoint) * 1 // or 0.2 case firstRange: return // code default: return //code } } 将具有calcInt值:Float10

错误是:

  

ClosedRange类型的表达式模式不能匹配Float类型的值

     

二元运算符 - 不能应用于Float和Int

类型的操作数

我理解错误,但我不知道要搜索什么来纠正错误。你能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:4)

Swift是强类型的。无论何时使用变量或将某些东西作为函数参数传递,Swift都会检查它是否为正确的类型。你不能将一个字符串传递给一个需要整数等的函数.Swift在编译时检查它(因为它是静态类型的)。​​

要遵守该规则,请尝试将代码更改为:

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    // your code goes here if needed
    return true; //disabled touching in whole activity
}

答案 1 :(得分:0)

对于第一个错误,您可能希望将ClosedRange指定为Floats类型。类似于:

let firstRange: ClosedRange<Float> = (2...10)

对于第二个错误,问题是您正在尝试将Float(范围:Float)与Int(startingPoint)进行比较。所以我建议你将startingPoint变量转换为Float。