【发布时间】:2015-08-13 22:44:28
【问题描述】:
我是“深入”OOP 和 iOS 开发的新手,所以这周一直在搞砸。我感觉更舒服了,所以决定制作一个石头、纸、剪刀游戏。我知道它非常简单,欢迎对这个非常简单的陈述提出任何批评。
为了比较用户和计算机选择,我创建了 compare picks 函数,其中嵌入了 case 语句。我得到的错误是该函数没有收到任何要返回的内容,大概是因为返回调用都在 switch 语句中。
func comparePicks(var human: String, var computer: String) -> String {
switch human{
//Player Chooses Rock
case "Rock":
if computer == "Rock"{
return "Draw"}
else if computer == "Paper"{
return "Lose"}
else if computer == "Scissors"{
return "Win"}
//Player Chooses Scissors
case "Scissors":
if computer == "Scissors"{
return "Draw"}
else if computer == "Rock"{
return "Lose"}
else if computer == "Paper"{
return "Win"}
//Player Chooses Paper
case "Paper":
if computer == "Paper"{
return "Draw"}
else if computer == "Rock"{
return "Lose"}
else if computer == "Scissors"{
return "Win"}
default:
return "error"
}
// Error here - "Missing return in a function expected to return 'String'
}
这些也会在哪里返回,switch 语句是否可以返回,我没有看到文档中提到的任何内容。我该如何更改它,以便将返回值提供给 compare Picks 函数。 TIA。
【问题讨论】:
-
您看到的错误是因为 Swift 不相信您已经涵盖了所有可能性。考虑一下如果为计算机传入“Spock”会发生什么。
-
解决问题的一个好方法是创建一个 3x3 数组,其中 3 列表示石头、剪刀、纸张,3 行表示相同,每个交叉点的值 -1 丢失,0平局,1胜,所以只要问result = array[computerValue, userValue]就可以知道结果
-
使用
enum代替下面建议的字符串可能是这里最好的解决方案。在其他情况下,您可以使用fatalError()告诉编译器某些情况“不会发生”,例如stackoverflow.com/questions/30189505/…。
标签: ios function swift switch-statement