我正在进行泛型编程,并且有一些符合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;
的参数列表
首先,错误可能会更有帮助,因为CountableRange
将Bound.Stride
定义为SignedInteger
(source)。所以错误可能告诉了我。
所以我知道它是Integer
,但我如何实际使用Integer
值?
答案 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 - amountToMove
和upperBound + amountToMove
编译。
答案 1 :(得分:0)
这应该适用于从swift 3.0开始的
let theCount:Int32 = Int32(count);
答案 2 :(得分:0)
如果您真的需要Int
,请尝试以下方式:
let theCount = Int(count.toIntMax())
toIntMax()
方法使用Swift的最宽本机有符号整数类型(即64位平台上的Int64
)返回此整数。