【问题标题】:cannot convert value of type 'Range<Int32>' to expected argument type 'Range<_>'无法将类型“Range<Int32>”的值转换为预期的参数类型“Range<_>”
【发布时间】:2021-02-05 18:05:18
【问题描述】:
@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给定的范围内生成随机数。

【问题讨论】:

  • 您没有提供足够的信息。变量Range1Range2 是如何声明的?

标签: ios swift uitextfield


【解决方案1】:

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

  1. 不要使用以大写字母开头的变量名
  2. 使用 Swift 类型而不是 Objective-C “NS”类型
  3. NSStringintValue属性返回一个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: "7")
randomValue(lowerString: "7", upperString: "8")
randomValue(lowerString: "foo", upperString: "7")
randomValue(lowerString: "7", 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

【讨论】:

  • 请注意,如果上限小于或等于下限,这可能会崩溃
  • 是的。我修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多