Как передать ключ словаря через функцию в Swift, чтобы вернуть значение, которое является массивом - PullRequest
0 голосов
/ 09 января 2019

Мне было поручено написать базовое приложение "Тезаурус" с несколькими записями, но я не знаю, как написать код, который может возвращать результат, когда ключ, прошедший через мою функцию, имеет нулевое значение .

В конце концов, идея состоит в том, чтобы соединить ввод текстового поля с выводом текстового представления, чтобы пользователь мог ввести любое слово, чтобы попытаться получить ответ. Но я даже не могу набрать свой код, не подключив его к пользовательскому интерфейсу.

let synonyms = ["swift" : ["abrupt", "expeditious", "hasty", "nimble", "quick", "rapid", "speedy", "sudden", "unexpected"]]

func buttonPressed(key:String)-> Array<Any> {
        return synonyms[key]!
}

buttonPressed(key: "swift")

Я не могу выполнить этот запуск без распаковки, но в конечном итоге я хочу, чтобы эта функция могла возвращать строку для нулевого ввода, которая говорит: «Извините, это слово отсутствует в Тезаурусе».

Я не мог понять, каким должно быть мое «другое», если бы я использовал «если позволено», чтобы развернуть; и я не мог понять, как вернуть массив в случае, если мой ключ имеет значение в моем словаре, но вернуть строку в случае с нулем.

Любой совет? Спасибо!

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Сначала к логике. Поскольку ваш словарь [String:[String]], вам нужно вернуть массив String как значение для строки ключ

  `String` ˇ
synonyms[key] // returns synonyms
^ dictonary       ^ `[String]`

Итак, у вас есть идея: у вас есть текстовое поле с вводом, кнопкой и видом текста. Прежде всего вам необходимо зарегистрироваться, когда кнопка нажата. Так что создайте действие для события .touchUpInside

@IBAction func buttonPressed(_ sender: UIButton) {
}

Таким образом, вы можете получить текст вашего текстового поля, получив его свойство text. То же самое вы можете сделать для просмотра текста.

textField.text 
textView.text

Так что теперь, когда кнопка нажата, получить ввод из текстового поля и, если клавиша для текста текстового поля существует, изменить текст представления текста на значение для этой клавиши

@IBAction func buttonPressed(_ sender: UIButton) {
    if let synonyms = synonyms[textField.text!] {
        let text = array.joined(separator: ", ")
        textView.text = text
    }
}

Вы заметили эту строку:

let text = array.joined(separator: ", ")

... вы не можете установить текст textView так же, как ваш массив, так как ваш массив имеет тип [String], но свойство text принимает одну строку. Таким образом, это «объединяет» ваш массив в один String с разделителем между каждым элементом из массива.

0 голосов
/ 09 января 2019

Надеюсь, это поможет вам. Чтобы вернуть массив:

let synonyms = ["swift" : ["abrupt", "expeditious", "hasty", "nimble", "quick", "rapid", "speedy", "sudden", "unexpected"]]

    func search(key: String)-> [String] {
        //The default value should also be an array with one String element
        return synonyms[key] ?? ["I'm sorry- this word is not in the Thesaurus."] 
    }

    //This is the button action that will call the search(key:) method
    @IBAction buttonPressed(_ sender: UIButton) {
        let results = search(key: textField.text ?? "") //get the text from the UITextField
    }
0 голосов
/ 09 января 2019

Словарь всегда возвращает необязательный параметр, поскольку ключ может не существовать. Думайте о своем словаре как [Строка: [Строка]?]

Вы можете развернуть его так же, используя оператор nil coalescing . ?? оператор в Swift

func buttonPressed(key:String)-> Array<Any> {
       return synonyms[key] ?? ["I'm sorry- this word is not in the Thesaurus."] 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...