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
我有一个 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