我的任务是编写只有几个条目的基本“同义词库”应用程序,但是我不知道如何编写可以通过函数传递的键具有nil值时返回结果的代码
最终,该想法是将文本字段输入连接到文本视图输出,以便用户可以输入任何单词来尝试获得响应。但是,如果不将代码连接到用户界面,我什至无法拨入代码。
let synonyms = ["swift" : ["abrupt", "expeditious", "hasty", "nimble", "quick", "rapid", "speedy", "sudden", "unexpected"]]
func buttonPressed(key:String)-> Array<Any> {
return synonyms[key]!
}
buttonPressed(key: "swift")
如果没有强制解包,我将无法运行该程序,但是我最终希望该函数能够为nil输入返回一个字符串,该字符串表示“我很抱歉-该词不在同义词库中。” < / p>
如果我使用“ if let”解开包装,我不知道应该是什么“ else”;而且我不知道在我的键在字典中有值的情况下如何返回数组,但是在无情况下返回字符串。
有什么建议吗?谢谢!
答案 0 :(得分:1)
由于键可能不存在,因此字典始终返回可选值。认为您的字典是[String:[String]?]
您可以使用 nil合并运算符对其进行解包。 ?? operator in Swift
func buttonPressed(key:String)-> Array<Any> {
return synonyms[key] ?? ["I'm sorry- this word is not in the Thesaurus."]
}
答案 1 :(得分:1)
首先是逻辑。由于您的字典是[String:[String]]
,因此您需要返回String
数组作为字符串 key
`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
,并在数组中每个元素之间使用分隔符。
答案 2 :(得分:0)
希望这对您有所帮助。 要返回数组:
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
}