微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法将“Range<Int32>”类型的值转换为预期的参数类型“Range<_>”

如何解决无法将“Range<Int32>”类型的值转换为预期的参数类型“Range<_>”

@IBAction func Guess(_ sender: UIButton) {
        var R1 = (Range1.text!as Nsstring).intValue
        var R2 = (Range2.text! as Nsstring).intValue
        //print(R1," ",R2)
        
        var answer = Int.random(in: R1..<R2)
    

我想从用户通过 TextField 给定的范围内生成随机数。

解决方法

您的代码有很多问题(Leo 在他的回答中涵盖了其中的一些问题,但为了完整起见列出了所有问题。)

  1. 不要使用以大写字母开头的变量名
  2. 使用 Swift 类型而不是 Objective-C 的“NS”类型
  3. NSString intValue 属性返回一个 Int32,您需要 Int 类型

试试这个使用原生 Swift 类型和正确变量命名的代码:

let text1 = "7"
let text2 = "13"
if let r1 = Int(text1),let r2 = Int(text2),r1 < r2 {
    let answer = Int.random(in: r1..<r2)
    print("random answer = \(answer)")
} else {
    print("Could not convert '\(text1)' or '\(text2)' to an Int")
}

编辑:

将上面的内容重写为一个函数,大约有 500 磅的错误检查:

@discardableResult func randomValue(lowerString: String?,upperString: String?) -> Int? {
    guard let lowerNonNilString = lowerString,let upperNonNilString = upperString else {
        print("One or more inputs is nil")
        return nil
    }
    guard let lower = Int(lowerNonNilString) else {
        print("'\(lowerNonNilString)' cannot be converted to an Int")
        return nil
    }
    guard let upper = Int(upperNonNilString) else {
        print("'\(upperNonNilString)' cannot be converted to an Int")
        return nil
    }
    guard lower < upper else {
        print("\(lower) must be less than \(upper)")
        return nil
    }
    let result = Int.random(in: lower..<upper)
    print("random value between '\(lowerNonNilString)' and '\(upperNonNilString)' is \(result)")
    return result
}

randomValue(lowerString: nil,upperString: "13")
randomValue(lowerString: "07",upperString: "13")
randomValue(lowerString: "13",upperString: "7")
randomValue(lowerString: "7",upperString: "8")
randomValue(lowerString: "foo",upperString: "bar")

输出:

One or more inputs is nil
random value between '07' and '13' is 10
13 must be less than 7
7 must be less than 7
random value between '7' and '8' is 7
'foo' cannot be converted to an Int
'bar' cannot be converted to an Int

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。