在初始化之前使用的SWIFT变量

时间:2018-09-28 06:30:40

标签: swift

我想知道为什么此代码无法运行。错误出现在最后一行(打印语句)(最后一个“字母等级”)上并显示

  

“在初始化之前使用了变量'letterGrade'”

let score = 86
var letterGrade: Character

if(score >= 90)
{
    letterGrade = "A"
}
else if(score >= 80)
{
    letterGrade = "C"
}
else if (score >= 70)
{
    letterGrade = "C"
}
else if (score >= 60)
{
    letterGrade = "D"
}
else if (score > 0)
{
    letterGrade = "F"
}
print("Your letter grade is \(letterGrade)")

2 个答案:

答案 0 :(得分:2)

是的,在分配等级之前使用了它(编译器在抛出此错误之前并不知道您是否已在if语句中涵盖了所有情况-实际上,您并未涵盖零,因为@MartinR告诉您)。

通过将第2行更改为

,您可以具有默认值(在英国,“ U”为未评级)
var letterGrade: Character = "U"

最好还是使用类型推断来表达

var letterGrade = "U"

您可能还希望使用开关来解决此类问题-使用此链接在Swift文档中查找-https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html

但这是我使用开关

的代码版本
let score = 86

var letterGrade: Character

switch score {

case 90 ..< 100:
    print("A")
case (80 ..< 90):
    print("B")
case (70 ..< 80):
    print("C")
case (0 ..< 70):
    print("D")
default:
    print("F")
}

这克服了编译器错误的问题。

希望这对您有所帮助。

答案 1 :(得分:0)

在初始化变量(为其提供初始值)之前,不能使用变量。

您处理了score >= 90score >= 80score >= 70以及score >= 60score > 0的情况。

如果分数等于0怎么办?如果发生这种情况,变量letterGrade将保持未初始化状态。

要解决此问题,您可以使用@stevenpcurtis的答案,也可以仅将最后一个else if语句替换为else

还考虑在switch情况下使用default语句。