Swift 4.2计算变量[String:Bool]无法正确分配值

时间:2019-03-24 14:46:22

标签: swift xcode macos command-line-interface

[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中,在其中找到了正确的结果,如下图所示。

Xcode Project Debug with print tmpOptionIsSwitch

有人有这样的问题吗?我做错了什么吗?

0 个答案:

没有答案