[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, что несовместимо с инструкциями печати.
Как часть моих действий по отладке, я скопировал приведенный выше код в Swift Playground, где обнаружил, что он дает правильные результаты, как показано на рисунке ниже.
У кого-нибудь есть такая проблема? Я что-то сделал не так?