swift - 无法将类型 'Range<Int>' 的值转换为预期的参数类型 'Range<_>'

标签 swift swift4.2

使用 Swift 4.2,我在这个函数中得到标题作为错误:

func jitter(range: Int) -> Int {
    return Int.random(in: 0..<range, using: SystemRandomNumberGenerator())
}

问题:

  1. Range<_> 的确切含义是什么?
  2. 有没有更好的方法来获得它?我只是想在动画循环中使用一个小的随机数。

最佳答案

Swift 编译器给你一个错误信息。问题是 Int.random(in:using:) 的第二个参数必须传递给 inout(即带有 & 前缀)。这有效:

func jitter(range: Int) -> Int {
    var rng = SystemRandomNumberGenerator()
    return Int.random(in: 0..<range, using: &rng)
}

更简单的是,完全省略 using: 参数(SystemRandomNumberGenerator 无论如何都是默认的 RNG):

func jitter(range: Int) -> Int {
    return Int.random(in: 0..<range)
}

关于swift - 无法将类型 'Range<Int>' 的值转换为预期的参数类型 'Range<_>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245851/

相关文章:

ios - 从 Swift 3.0 到 Swift 4.2 的转换错误 "Cannot assign value of type ' [String ]' to type ' [AVMetadataObject.ObjectType] ?'"

ios - 从 nib 文件所有者加载 ViewController

swift - NSPredicate - 使用日期属性搜索

swift - 运动/ Material 不平衡调用开始/结束外观过渡

swift - 屏幕顶部的 Admob 横幅

ios - 如何制作可扩展的 UITableView 标题?

ios - 为特定 UITextField 分配字符限制

swift - 如何将 subview 添加到所有 UITable 单元格

ios - UITableView 多选的选定复选标记未保持选中状态

ios - Xcode 10 无效的二进制架构?