Swift: как правильно сравнить строковое значение с несколькими значениями

может случиться так, что приложение midi-типа application / x-www-form-urlencoded преобразует пространство в +, и приемник будет декодировать данные, преобразовывая + в space.check url для получения дополнительной информации. http: //www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1

0
задан Shift 11 March 2019 в 13:39
поделиться

3 ответа

Не совсем понятно, что это за строка, но это определенно неправильная структура данных. Я подозреваю, что вы ищете что-то вроде этого, массив этапов, каждый из которых содержит массив уровней, который содержит массив строк.

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, но они не являются правильным способом решения этой проблемы.

0
ответ дан Rob Napier 11 March 2019 в 13:39
поделиться

Может быть, вы понимаете, добавление словаря к вашим текущим данным.

    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")

        }
    }
0
ответ дан E.Coms 11 March 2019 в 13:39
поделиться

Я бы создал структуру 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 }
0
ответ дан Joakim Danielson 11 March 2019 в 13:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: