簡體   English   中英

無法轉換“范圍”類型的值<int32> ' 到預期的參數類型 'Range&lt;_&gt;'</int32>

[英]cannot convert value of type 'Range<Int32>' to expected argument type '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 給定的范圍生成隨機數。

@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")
}

編輯:

將上面的代碼重寫為 function,進行大約 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM