Вычисляемая переменная Swift 4.2 [String: Bool] неправильно присваивает значение - PullRequest
0 голосов
/ 24 марта 2019

[MacOS 10.14.1, Xcode 10.1, Swift 4.2]

Я работаю над созданием процессора аргументов CLI в стиле * 1003, пока практикую Swift. В своем проекте я решил создать вычисляемую переменную, представленную в виде словаря [String:Bool], которую можно проверить, чтобы увидеть, является ли опция (ключ) просто переключателем (значение = true) или может ли она включать параметры (значение = ложный). Итак, я написал код ниже, который в данный момент находится в моем маленьком (300 строк) файле main.swift.

Код работает правильно на игровой площадке, но в моем проекте Swift Xcode, хотя ключи словаря верны, значения всегда ложные и не соответствуют печатным сообщениям.

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, что несовместимо с инструкциями печати.

Xcode Project Debug with print tmpOptionIsSwitch Как часть моих действий по отладке, я скопировал приведенный выше код в Swift Playground, где обнаружил, что он дает правильные результаты, как показано на рисунке ниже.

Playground Results

У кого-нибудь есть такая проблема? Я что-то сделал не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...