在UITextView

时间:2016-06-24 19:03:45

标签: ios swift loops dictionary

我是编程的新手,我正在Swift中构建一个简单的iOS应用程序,允许用户将项目添加到列表中。我已经准备好添加新项目,在列表中查看它们,订购列表,查看详细视图等。每个项目包括名称[String]和Comment [String]。名称通过UITextField输入,注释通过UITextView输入。

我写了一个词典,将一组键例如“鸡尾酒”与一个值相关联,例如“bar”。键和值都是字符串。

我想检测输入到评论UITextView中的任何字典键,并从字典中返回值。

好奇有些人可能会这样做......

从概念上讲,我认为我需要:

  • 创建一个变量enteredCommentText来存储在commentUITextView中输入的内容

  • 编写一个遍历enteredCommentText的函数来检测字典中的任何键(字符串)

  • 返回检测到的每个密钥的每个密钥的值

  • 将这些值保存为数组,以便我可以随心所欲地使用

奖励:我可以检测用户输入,而不是在事件之后,即DidEndEditing或转到下一个字段或点击保存等?

非常感谢任何代码建议。我一直在玩Apple的一些词典语法:

    var keywordDict: [String: String] = [
        "cocktail": "bar"
        ]

    //Look up a value, print the key
    if let wordValue = keywordDict["cocktail"] {
        print("The keyword is \(wordValue).")
    //Prints: "The keyword is bar."
    }

    let enteredCommentText = "Here is a sample of text. It contains a burger."

    //Detect text
    if enteredCommentText.containsString("burger") {
        print("found burger")
    //Prints: "found burger"
    }

3 个答案:

答案 0 :(得分:1)

你在概念上是正确的。下面是一个示例实现,它显示了如何获取给定字符串的匹配值 - 假设您需要contains而不是我从示例代码中收集的完全匹配。

let dict = ["Hi" : "there"]
let filteredString = "some text"
let matchingValues = dict.filter { $0.0.containsString(filteredString) }.map { $0.1 }
// matchingValues now contains all values of the dictionary where the key matched

如果你不熟悉filter / map语法,这里有一个实现相同的东西并且实际上更快的循环......但更不用说了! ;)

var matchingValues = [String]()
for (key, value) in dict {
    if key.containsString(filteredString) {
        matchingValues.append(value)
    }
}

如果您想在每次击键时获得更新,可以使用以下代码:

class YourViewController {
    func textChanged(sender: UITextField) {
        // Do your stuff here
    }

    func viewDidLoad() {
        super.viewDidLoad()
        // other setup code...

        myTextField.addTarget(self, action: #selector(YourViewController.textChanged(_:)), forControlEvents: .EditingChanged)
    }
}

请注意,您还可以通过从文本字段拖动到类,并选择“编辑已更改”作为事件类型,通过InterfaceBuilder添加操作。

答案 1 :(得分:0)

您好这是您需要的代码,当用户输入onAuthenticationFailure中包含的字词时,dictionary替换value

dict

我希望这有助于你

答案 2 :(得分:0)

我在David的帮助下写下了这个,并按照我的预期打印了这些值!

var myDict [String:String] [   “key1”:“value1”,   “key2”:“value2” ]

for myDict中的{key,value} {             如果放置!.comment.rangeOfString(key)!= nil {                 打印(值)             }         }