首页 > 解决方案 > 初始化前使用的 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)")

标签: swift

解决方案


是的,它在被分配等级之前使用(编译器不知道您在抛出此错误之前已经涵盖了 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")
}

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

希望这对您有所帮助。


推荐阅读