может случиться так, что приложение midi-типа application / x-www-form-urlencoded преобразует пространство в +, и приемник будет декодировать данные, преобразовывая + в space.check url для получения дополнительной информации. http: //www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
Не совсем понятно, что это за строка, но это определенно неправильная структура данных. Я подозреваю, что вы ищете что-то вроде этого, массив этапов, каждый из которых содержит массив уровней, который содержит массив строк.
struct Level {
var values: [String]
}
struct Stage {
var levels: [Level]
}
let stages = [
Stage(levels: [
Level(values: ["One", "Two"])
Level(values: ["Horse", "Shoe"]),
Level(values: ["One", "Two"]),
]),
Stage(levels: [
Level(values: ["Snow", "Sun"]),
Level(values: ["Smile", "Cry"]),
Level(values: ["Five", "Six"]),
]),
]
var currentStage = 1
var currentLogo = 2
// Remember that arrays are 0-indexed. If "currentStage" is 1-indexed
// you need to adjust it
let level = stages[currentStage - 1].levels[currentLogo - 1]
let words = level.values
if let text = textFieldChangedOut.text, words.contains(text) {
print("Contains the value")
}
То, что вы пытаетесь сделать с помощью динамического вычисления имени переменной, невозможно в чистом Swift. Есть способы достичь этого путем соединения с ObjC, но они не являются правильным способом решения этой проблемы.
Может быть, вы понимаете, добавление словаря к вашим текущим данным.
let Stage1Level1 = ["Phone","Computer,Television"]
let Stage1Level2 = ["Horse","Shoe"]
let Stage1Level3 = ["Milk"]
let Stage2Level1 = ["Snow","Sun"]
let Stage2Level2 = ["Smile","Cry","Water","Salt"]
let Stage2Level3 = ["Five"]
var currentStage = 1
var currentLogo = 2
var stageDict : [String: [String]] = [:]
stageDict["Stage1Level1"] = Stage1Level1
stageDict["Stage1Level2"] = Stage1Level2
stageDict["Stage1Level3"] = Stage1Level3
stageDict["Stage2Level1"] = Stage2Level1
stageDict["Stage2Level2"] = Stage2Level2
stageDict["Stage2Level3"] = Stage2Level3
//You also can build by this way
[[Stage1Level1, Stage1Level2, Stage1Level3], [Stage2Level1, Stage2Level2,Stage2Level3]]
.enumerated().forEach{ stage in stage.element.enumerated().forEach{
stageDict["Stage\(stage.offset+1)Level\([110].offset+1)"] = [110].element
}
}
@IBAction func textFieldChanged(_ sender: Any) {
if stageDict["Stage\(currentStage)Level\(currentLogo)"]!.contains(textFieldChangedOut.text!) {
print("Contains the value")
}
}
Я бы создал структуру stage, level и strings и получил бы массив этой структуры
struct StageLevel {
let stage: Int
let level: Int
let words: [String]
}
let stageLevelArray: [StageLevel] =
[StageLevel(stage: 1, level: 1, words: ["Hello", "Hi"]),
StageLevel(stage: 1, level: 2, words: ["Red", "Blue", "Green"]),
StageLevel(stage: 2, level: 1, words: ["No", "Yes"])]
, тогда вы можете отфильтровать все элементы для выбранной стадии
let levels = stageLevelArray.filter( { [111].stage == 1} )
[116 ] или отфильтруйте для стадии и уровня
let selection = stageLevelArray.filter( { [112].stage == 1 && [112].level == 2 } )
или если вам нужны только уровни или массивы
let levels = stageLevelArray.filter( { [113].stage == 1} ).map { [113].level}
let selection = stageLevelArray.filter( { [113].stage == 1 && [113].level == 2 } ).map { [113].words }