您的代码有很多问题(Leo 在他的回答中涵盖了其中一些问题,但为了完整性列出了所有问题。)
- 不要使用以大写字母开头的变量名
- 使用 Swift 类型而不是 Objective-C “NS”类型
- 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: "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