2017-09-15 53 views
-2

我意识到这已被问过,但这里的答案(在块外部声明该变量)似乎不起作用。 link description如何通过开关/外壳传递全局变量

var filter: String 
    func Usage() { 
    print("Usage: <filter> <input> [output]") 
    print("System filter paths do not need to be specified.") 
    return 
} 

    let arguments = ["qwe", "value", "qwe", "asd"] 
    print(arguments.count) 
    switch arguments.count { 
    case 1: 
     Usage() 
    case 2: 
     Usage() 
    case 3: 
     filter = arguments[1] 

    default: 
     filter = arguments[1] 
     print (filter) 
    } 
    print (filter) 

我在Xcode游乐场为先打印得“值”,但第二个给人“\ n”或“未初始化值”。 我在做什么错?

+1

switchfilter请更新与足够的代码你的问题,为人们重现该问题。这并不意味着你的整个项目。 – rmaddy

+0

嗨benwiggy,这是不足以重现问题的代码。 – Arrabidas92

回答

3

你的代码不需额外编译首先,你得到的错误error: variable 'filter' used before being initialized

所以声明过滤器如下: var filter = String()var filter = ""

其次,因为you're不添加所有的代码,我的试过如下:

var filter = String() 
let x = 0 

switch x { 
case 1: 
    print("1") 
default: 
    filter = "value" 
    print(filter) 
} 
print(filter) 

此打印出:

value 
value 

如果您需要更多帮助,请通过更多信息更新您的问题。

更新:
只是想你更新的代码: VAR过滤=字符串() 让论据= “QWE”, “价值”, “QWE”, “ASD”] 打印(arguments.count ) 开关arguments.count { 壳体1: 断裂 壳体2: 断裂 壳体3: 滤波器=参数[1]

default: 
    filter = arguments[1] 
    print (filter) 
} 
print (filter) 

这打印出来:

4 
value 
value 

这正是它应该打印出来。请记住filter的初始化。

更新2:
这是you're试图做的,你的其他结果总是返回4,因为that's的arguments计数。改为尝试下面的代码。

var filter = String() 
func Usage() { 
    print("Usage: <filter> <input> [output]") 
    print("System filter paths do not need to be specified.") 
    return 
} 

let arguments = ["qwe", "value", "qwe", "asd"] 
print(arguments.count) 

for i in 0..<arguments.count { 
    switch i { 
    case 0: 
     Usage() 
    case 1: 
     Usage() 
    case 2: 
     Usage() 
    case 3: 
     filter = arguments[1] 
    default: 
     filter = arguments[1] 
     print (filter) 
    } 
} 
print (filter) 

此打印出:

4 
Usage: <filter> <input> [output] 
System filter paths do not need to be specified. 
Usage: <filter> <input> [output] 
System filter paths do not need to be specified. 
Usage: <filter> <input> [output] 
System filter paths do not need to be specified. 
value 
+0

它似乎是当我在其他案例语句中添加一个函数时,它会中断。该功能只是打印文本(在这个阶段)。 – benwiggy

+0

将代码添加到函数中,我会看看@benwiggy –

+0

@benwiggy,你的代码工作正常,但你确实意识到迭代以0开始,并且这不包含在你的开关中,并且默认会被命中。 –

1

您的代码似乎是一个命令行界面的切入点。

这是一种替代方法,没有声明全局变量,也没有switch

Usage是打印的,如果参数的数量小于3,否则将CLI的名称后面的前两个参数(在索引0处)分配给两个变量。

let arguments = ["qwe", "value", "qwe", "asd"] 
print(arguments.count) 
if arguments.count < 3 { 
    Usage() 
    exit(EXIT_FAILURE) 
} 

let filter = arguments[1] 
let secondArgument = arguments[2] 
print (filter, secondArgument) 

然后,你可以

switch filter { 

    case "value": doThis(with: secondArgument) 
    case "someOtherFilter": doThat(with: secondArgument) 
    default: doNothing() 
} 
+0

谢谢。参数将会是文件名,所以我无法检查所有可能的类型。而且参数的数量可能会有所不同。我已经在Python中完成了;我可能只是看看我是否可以得到编译.... – benwiggy