Swift将Integer转换为Int

时间:2017-05-05 16:55:35

标签: swift

我正在进行泛型编程,并且有一些符合Integer的内容。不知怎的,我需要把它变成一个我可以使用的具体Int

extension CountableRange
{
    // Extend each bound away from midpoint by `factor`, a portion of the distance from begin to end
    func extended(factor: CGFloat) -> CountableRange<Bound> {
        let theCount = Int(count) // or lowerBound.distance(to: upperBound)
        let amountToMove = Int(CGFloat(theCount) * factor)
        return lowerBound - amountToMove ..< upperBound + amountToMove
    }
}

此处的错误在let theCount = Int(count)上。哪个州:

  

无法为类型&#39; Int&#39;调用初始化程序。使用类型&#39;(Bound.Stride)&#39;

的参数列表

首先,错误可能会更有帮助,因为CountableRangeBound.Stride定义为SignedIntegersource)。所以错误可能告诉了我。

所以我知道它是Integer,但我如何实际使用Integer值?

3 个答案:

答案 0 :(得分:4)

您可以使用numericCast() 在不同的整数类型之间转换。作为文档 规定:

  

通常用于转换为任何上下文推导的整数类型。

在你的情况下:

extension CountableRange where Bound: Strideable {

    // Extend each bound away from midpoint by `factor`, a portion of the distance from begin to end
    func extended(factor: CGFloat) -> CountableRange<Bound> {
        let theCount: Int = numericCast(count)
        let amountToMove: Bound.Stride = numericCast(Int(CGFloat(theCount) * factor))
        return lowerBound - amountToMove ..< upperBound + amountToMove
    }
}

限制Bound: Strideable是进行算术运算所必需的 lowerBound - amountToMoveupperBound + amountToMove编译。

答案 1 :(得分:0)

这应该适用于从swift 3.0开始的

let theCount:Int32 = Int32(count);

答案 2 :(得分:0)

如果您真的需要Int,请尝试以下方式:

let theCount = Int(count.toIntMax())

toIntMax()方法使用Swift的最宽本机有符号整数类型(即64位平台上的Int64)返回此整数。