使用在for语句中创建的字符串-Swift

使用在for语句中创建的字符串-Swift,swift,for-loop,Swift,For Loop,如果我有这段代码: for a in cookies { let b = "hello" } print (b) // This doesn't work 我怎样才能让它工作 for a in cookies { let b = "hello" } b在for循环的范围内声明。 因此,当循环结束时,您将无法访问它 将您的代码更改为此 var b = "" for a in cookies { b = "hello" } b现在声明在for循环的范围之外。因此,在循

如果我有这段代码:

for a in cookies {
    let b = "hello"
}

print (b) // This doesn't work
我怎样才能让它工作

for a in cookies {
    let b = "hello"
}
b
在for循环的范围内声明。 因此,当循环结束时,您将无法访问它

将您的代码更改为此

var b = ""
for a in cookies {
    b = "hello"
}
b
现在声明在for循环的范围之外。因此,在循环完成后,您将有权访问它。

我要补充的是,如果直接在进入实例化它的作用域之前(在首次使用它之前)声明本地属性,您实际上可以在不实例化它的情况下声明它

在上面的循环示例中,这看起来很奇怪,但如果您知道实例化的值将被覆盖且永远不会使用,则可以避免额外的不必要的实例化;在这种情况下,您可以让
b
成为不可变的,根据作用域上下文有条件地实例化为不同的值。例如:

let foo = true // or 'false'

let b: String  // only declared
if foo {       // conditionally instantiated to "foo"
    b = "foo"
}
else {         // or, conditionally instantiated to "bar"
    b = "bar"
}

// 'b' has been instantiated to "foo" or "bar"
print(b) // "foo", for this example

让cookies中a的b=String(){b=“hello”}print(b)
这不起作用,因为变量b是for循环中的局部变量,在循环外无法识别@ei-captain-v2-0解决方案工作起来很挑剔,请注意,第二个代码段中的
b
不仅在
循环的
范围之外声明,而且在
范围之外实例化。
let foo = true // or 'false'

let b: String  // only declared
if foo {       // conditionally instantiated to "foo"
    b = "foo"
}
else {         // or, conditionally instantiated to "bar"
    b = "bar"
}

// 'b' has been instantiated to "foo" or "bar"
print(b) // "foo", for this example