如何从视野中移除变量
How to remove a variable from the field of view
while true {
print ( """
1. Log in
2. Create new user
3. Quit
""")
if let numberString = readLine(), let number = Int(numberString) {
print("you entered \(number)")
break
} else {
print("Try again")
}
}
以后需要用number变量来比较。
怎么能看不出来呢?
当我尝试制作一个全局变量时出了点问题:
var numberString: String?
var number: Int?
while true {
print ( """
1. Log in
2. Create new user
3. Quit
""")
if numberString = readLine(), number = Int(numberString) {
print("you entered \(number)")
break
} else {
print("Try again")
}
}
这里没有太多信息,但我想我可以提供帮助。在第一个脚本中,您正在创建一个新变量并设置该变量的值:
if let numberString = readLine(), let number = Int(numberString) { ... }
在您的第二个脚本中,您必须使用全局变量,但您从未为它们提供值。您需要做的是在比较它们之前为全局变量(numberString
和 number
)提供一个值。因此,您需要使用 == 符号来比较不同的变量/类型。例如:
var numberString: String?
var number: Int?
while true {
print("""
1. Log in
2. Create new user
3. Quit
""")
numberString = readLine()
number = Int(numberString!)
}
您现在可以比较和/或打印您的全局变量...
最终代码
var numberString: String?
var number: Int?
while true {
print("""
1. Log in
2. Create new user
3. Quit
""")
numberString = readLine()
number = Int(numberString!)
if number == 1 {
print("you have selected number one")
} else if number == 2 {
print("you have selected number two")
} else if number == 3 {
print("you have selected number three")
} else {
print("Try again")
}
}
由于numberString
和number
两个变量现在都是全局变量,以后需要再比较时可以访问。
考虑到您正在创建一个命令提示符并且该选择在您的循环之外没有任何意义,因此无需将其设为全局。您只需要切换用户选择并从那里决定要做什么。请注意,如果您尝试从开关内部中断,您将不会退出循环,正如我在上一个问题中向您展示的那样。为了让编译器知道您想要中断 while 循环而不是 switch,您需要标记 while 循环语句,这样您可以指定当循环内有 switch 时要中断的内容。像这样尝试:
func getValue() -> Int? {
guard let line = readLine(), let value = Int(line) else {
return nil
}
return value
}
question: while true {
print("""
1. Log in
2. Create new user
3. Quit
""")
guard let value = getValue() else {
continue
}
switch value {
case 1:
print("you have selected number one")
case 2:
print("you have selected number two")
case 3:
print("Good bye")
break question
default:
print("Try again")
}
}
while true {
print ( """
1. Log in
2. Create new user
3. Quit
""")
if let numberString = readLine(), let number = Int(numberString) {
print("you entered \(number)")
break
} else {
print("Try again")
}
}
以后需要用number变量来比较。 怎么能看不出来呢?
当我尝试制作一个全局变量时出了点问题:
var numberString: String?
var number: Int?
while true {
print ( """
1. Log in
2. Create new user
3. Quit
""")
if numberString = readLine(), number = Int(numberString) {
print("you entered \(number)")
break
} else {
print("Try again")
}
}
这里没有太多信息,但我想我可以提供帮助。在第一个脚本中,您正在创建一个新变量并设置该变量的值:
if let numberString = readLine(), let number = Int(numberString) { ... }
在您的第二个脚本中,您必须使用全局变量,但您从未为它们提供值。您需要做的是在比较它们之前为全局变量(numberString
和 number
)提供一个值。因此,您需要使用 == 符号来比较不同的变量/类型。例如:
var numberString: String?
var number: Int?
while true {
print("""
1. Log in
2. Create new user
3. Quit
""")
numberString = readLine()
number = Int(numberString!)
}
您现在可以比较和/或打印您的全局变量...
最终代码
var numberString: String?
var number: Int?
while true {
print("""
1. Log in
2. Create new user
3. Quit
""")
numberString = readLine()
number = Int(numberString!)
if number == 1 {
print("you have selected number one")
} else if number == 2 {
print("you have selected number two")
} else if number == 3 {
print("you have selected number three")
} else {
print("Try again")
}
}
由于numberString
和number
两个变量现在都是全局变量,以后需要再比较时可以访问。
考虑到您正在创建一个命令提示符并且该选择在您的循环之外没有任何意义,因此无需将其设为全局。您只需要切换用户选择并从那里决定要做什么。请注意,如果您尝试从开关内部中断,您将不会退出循环,正如我在上一个问题中向您展示的那样。为了让编译器知道您想要中断 while 循环而不是 switch,您需要标记 while 循环语句,这样您可以指定当循环内有 switch 时要中断的内容。像这样尝试:
func getValue() -> Int? {
guard let line = readLine(), let value = Int(line) else {
return nil
}
return value
}
question: while true {
print("""
1. Log in
2. Create new user
3. Quit
""")
guard let value = getValue() else {
continue
}
switch value {
case 1:
print("you have selected number one")
case 2:
print("you have selected number two")
case 3:
print("Good bye")
break question
default:
print("Try again")
}
}