Swift:我们需要在使用变量之前声明它吗?

4

我对Swift非常陌生。这个问题是我偶然遇到的。

这是一个在The Swift Programming Language(Swift 2.1)中的例子。

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
print(teamScore)

正如您所看到的,在上面的代码段中,score是一个变量。但它显然在使用之前没有被声明。也就是说,没有这样的语法:

var score: Int

或者
var score = 0

我想知道为什么或如何在不使用var语法声明变量类型的情况下使用变量。

就像C++中的语法(Swift在某种程度上与C++类似),如果变量没有被声明,则应该是“无法识别”的。

提前致谢。


它只存在于循环内部。 - Leo Dabus
In 只存在于循环内部。它的类型被推断为您枚举的对象的元素类型(由于 individualScores[Int],所以类型为 Int)。该变量无法被赋值。 - zneak
1个回答

5

score 是由 for 循环赋值的。它的类型被推断为 individualScores 的元素类型。因为 individualScores 是一个由 Int 组成的数组,所以 score 必须是一个 Int 类型。因此,在这种情况下,您不需要正式声明其类型。

闭包有类似的行为,您可以命名变量而不需要使用 letvar 正式声明它们。例如:

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0

individualScores.forEach {
    score in
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}

print(teamScore)

谢谢!随着我的学习不断深入,我发现这种现象经常出现。仅在for循环中使用的变量总是使用这种非正式声明,并且它们在for循环外部将毫无意义,对吗? - JW.ZG
是的,只有在for循环内才有意义,就像for(int i=0; i < something; i++){...}中的i一样。 - Nicolas Miari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接