Swift-JSON解码为字符串的结构包含



我从远程服务器上获取了一个JSON文件并对其进行解码。它被解码为一个结构,然后在@Published var.中使用

例如:

JSON:

[{"keyword": "foo"}, {"keyword": "blah"}]

结构:

struct keywords: Codable {
var keyword: String
}

可观察类别:

@Published var keys: [keywords] = []

我需要使用contains与用户输入的值进行实时比较,使用if语句。我可以让它使用键var中的第一个条目,并检查该字符串中的任何字符,但我不能让它只在整个数组中对完整的字符串(而不是单个字符(进行操作。

以下是只对数组的第一个条目和每个单独的字符进行正确检查的内容。

if keys[0].keyword.contains(where: blah.contains)

我也尝试过将它映射到这样的字符串(做完全相同的事情(:

if (keys[0].keyword.map{String($0)}).contains(where: blah.contains)

我已经做了一整天了,但找不到任何关于如何正确做到这一点的文档。

目标不仅仅是让它使用数组的第一个条目,而是使用数组的全部条目。我知道这是[0],但没有它就无法编译。我需要在整个字符串上进行比较,而不是在单个字符上。

例如,如果单词blah是数组,并且用户输入bla,那么它不应该匹配任何内容。只有当整个单词blah包含在用户的条目中时,它才应该匹配(即fooblahfoo会匹配,因为blah在字符串中,但foobalbabh不会匹配,即使单词blah中包含的所有字符都在该字符串中(。

感谢您对实际代码示例的帮助。这是Swift 5.5。

更新:

不确定混乱是从哪里来的,但这里有一个更明确的解释。

有一个名为username的TextField,用户在其中输入一个字符串。

如果用户输入字符串fooblahfoo,并且单词blah在数组中的某个位置,那么它应该匹配。

当你有这样一个简单的字符串数组时,这很容易:keywords=["foo","blah"]

为此,您只需执行keyword.contents(其中:username.contents(

然而,解码后的JSON更像是一个字典,而不是一个简单的字符串数组,因此您必须调用关键字的键并查看所有值才能进行比较。

首先,在keys数组上使用contains(where:),然后检查每个项,查看用户输入是否包含该关键字。

struct Keywords: Codable {
var keyword: String
}
var keys: [Keywords] = [.init(keyword: "foo"),.init(keyword: "blah")]
var userInput = "fooblahfoo"
var result = keys.contains { userInput.contains($0.keyword) }
print(result)

真实

最新更新