如何在Swift中增加switch-case /循环中的变量范围?

KML*_*KML 5 swift

如何使用switch case语句创建在switch-case语句之外有效的变量/常量.如果没有办法做到这一点,我还能做些什么来达到相同的效果,即创建受条件限制的变量,并使其在"全局"或更高范围内可访问?

var dogInfo = (3, "Fido")

switch dogInfo {

case(var age, "wooff"):
    println("My dog Fido is \(age) years old")

case (3, "Fido"):
    var matchtrue = 10           --> 10
    matchtrue                    -->10

default:
    "No match"
}

matchtrue                       --> Error: Use of unresolved identifier 'matchtrue'
Run Code Online (Sandbox Code Playgroud)

这是我解决的问题:

var randomNumberOne = 0, randomNumberTwo = 0, randomNumberThree = 0

func chosen (#a: Int, #b: Int) -> (randomNumberOne: Int, randomNumberTwo: Int, randomNumberThree: Int){

if a > 0 {
    let count1 = UInt32(stringArray1.count)-1
    let randomNumberOne = Int(arc4random_uniform(count1))+1
}

if b > 0 {
    let count2 = UInt32(stringArray2.count)-1                  Output: 3 (from earlier)
    let randomNumberTwo = Int(arc4random_uniform(count2))+1    Output: 2
}

if a > 0 && b > 0 {
    let count3 = UInt32(stringArray3.count)-1
    let randomNumberThree = Int(arc4random_uniform(count3))+1

}
return (randomNumberOne, randomNumberTwo, randomNumberThree)


}

chosen(a:0,b:1)                                              Output: (.00,.12,.20)
Run Code Online (Sandbox Code Playgroud)

太好了,我现在可以用这个数组索引! 谢谢!

Ben*_*aum 7

这里没有魔术.Swift使用块作用域并switch创建一个新的作用域来防止错误,并向程序员显示变量仅在作用域中使用.如果您想使用范围之外的变量 - 在switch子句之外声明这些标识符.

var dogInfo = (3, "Fido")
var matchtrue:Int = 0 // whatever you'd like it to default to
switch dogInfo {
case(var age, "wooff"):
    println("My dog Fido is \(age) years old")
case (3, "Fido"):
    matchtrue = 10           --> 10
    matchtrue                    -->10
default:
    "No match"
}
matchtrue     --> 10
Run Code Online (Sandbox Code Playgroud)