Swift - JSON 解码为 Struct Contains Against String

Swift - JSON Decode into Struct Contains Against String

我有一个 JSON 文件,我正在从远程服务器抓取并对其进行解码。它被解码成一个结构,然后在 @Published 变量中使用。

例如:

JSON:

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

结构:

struct keywords: Codable {
var keyword: String
}

可观察到Class:

@Published var keys: [keywords] = []

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

下面是正确检查数组的第一个条目和每个单独字符的方法。

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

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

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

一整天都在做这个,但找不到任何关于如何正确执行此操作的文档。

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

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

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

更新:

不确定混乱从何而来,但这里有一个更清楚的解释。

有一个名为用户名的文本字段,用户可以在其中输入字符串。

如果用户输入字符串 fooblahfoo 并且单词 blah 在数组中的某处它应该匹配。

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

为此,您只需执行 keywords.contains(其中:username.contains)

然而,解码后的 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([=10=].keyword) }

print(result)

true