[MacOS 10.14.1,Xcode 10.1,Swift 4.2]
我正在练习Swift的同时创建一种getopt
风格的CLI自变量处理器。在我的设计中,我决定创建一个表示为[String:Bool]
字典的计算变量,可以检查该变量以查看选项(键)是否只是一个开关(值= true)或是否可以包含参数(值=假)。因此,我已经在下面编写了代码,这些代码目前都在我的小文件(300行)main.swift
中。
该代码在操场上可以正常工作,但是在我的Swift Xcode项目中,虽然字典的键是正确的,但值始终为false,并且与打印的消息不一致。
let options = "cwt:i:o:"
//lazy var optionIsSwitch : [String:Bool] = { (This will be moved to a class)
var optionIsSwitch : [String:Bool] = {
var tmpOptionIsSwitch : [String:Bool] = [:]
let optionsStrAsArray = Array(options)
let flags = Array(options.filter { !":".contains($0) } )
tmpOptionIsSwitch.reserveCapacity(flags.count)
for thisOption in 0...flags.count-1 {
var posInOptionsStr = 0
while posInOptionsStr < optionsStrAsArray.count-1 && flags[thisOption] != optionsStrAsArray[posInOptionsStr] {
posInOptionsStr += 1
}
if posInOptionsStr < optionsStrAsArray.count-1 && optionsStrAsArray[posInOptionsStr+1] == ":" {
tmpOptionIsSwitch[String(flags[thisOption])] = false
print("\(flags[thisOption]) is FALSE")
} else {
tmpOptionIsSwitch[String(flags[thisOption])] = true
print("\(flags[thisOption]) is TRUE")
}
}
return tmpOptionIsSwitch
}()
我已经遍历了项目中的代码以观察执行顺序,并发现它是正确的。根据第一个图像,tmpOptionIsSwitch
返回一个包含右键的字典,但是所有值都设置为false,这与print语句不一致。
https://github.com/Brackeys/2D-Character-Controller 作为调试活动的一部分,我将上面的代码复制到Swift Playground中,在其中找到了正确的结果,如下图所示。
有人有这样的问题吗?我做错了什么吗?