import UIKit
import Foundation
func randomnumber (low:Int,high:Int )->Int
{
let range = high - (low-1)
return (Int (arc4random()) % range ) + ( low - 1)
}
let answer = randomnumber(low: 0, high: 100)
var turn = 1
while (true)
{
print ("Guess #\(turn): enter a number between 0 and 100")
let userinput = readLine();
if let guess:Int = Int(userinput!)
{
if( guess<answer )
{
print("choose a higher number")
}
if ( guess>answer )
{
print ("choose a smaller number")
}
if( guess==answer)
{
print("wohoo you won")
break;
}
}
}
这段代码是关于一个使用swift的简单游戏,有一个随机数,然后输入一个输入,如果这个输入大于随机数,我们必须选择较小的数字,如果我们选择较小的数字则相反仍然不等于随机数,如果它等于你获胜的随机数。 出现此错误: 致命错误:在解包可选值时意外发现nil
答案 0 :(得分:1)
正如Tristan Beaton所指出的那样,readLine()
在游乐场不起作用,因此你的userInput总是为零。
强行打开时也要非常小心。这总是一个等待发生的崩溃;)你可以阅读这个tutorial
答案 1 :(得分:0)
我在命令行工具中对此进行了测试,但它确实有效。另外,不要强制打开选项,因为你可以检查他们是否有数据而不会崩溃应用程序。
我在你的其他if语句中添加了continue语句。尽管在这种情况下并不是真的需要,但最好还是使用它以便继续执行后的任何代码都不会被执行。它只是节省了一点计算能力。
import Foundation
func randomnumber(low: Int, high: Int) - >Int {
let range = high - (low-1)
return (Int(arc4random()) % range) + (low - 1)
}
let answer = randomnumber(low: 0, high: 100)
var turn = 1
while (true) {
print("Guess #\(turn): enter a number between 0 and 100")
if let userinput = readLine() {
if let guess:Int = Int(userinput) {
// Putting this here will only increase the guess count if their input in a number.
turn += 1
if guess < answer {
print("choose a higher number")
continue
}
if guess > answer {
print ("choose a smaller number")
continue
}
if guess == answer {
print("wohoo you won")
break
}
}
}
}
这是控制台输出