用Swift中的嵌套字典类型确定字典
我有一个结构如下的字典,我需要声明它的类型,以避免在索引嵌套字典时出现诸如“Binary operator”!=“不能应用于类型为“Any?”和“String”的操作数之类的错误用Swift中的嵌套字典类型确定字典,swift,swiftui,Swift,Swiftui,我有一个结构如下的字典,我需要声明它的类型,以避免在索引嵌套字典时出现诸如“Binary operator”!=“不能应用于类型为“Any?”和“String”的操作数之类的错误 @State var data = [ "base" : "baseLanguage", "target" : "targetLanguage", "languages" : [
@State var data = [
"base" : "baseLanguage",
"target" : "targetLanguage",
"languages" : [
"language" : [
"target" : true,
"strings" : [
"..." : [
"translation" : "...",
"pinned" : false,
"order" : 0
]
]
]
]
]
Xcode将该类型标识为“[String:Any]”,但我希望它是以下类型。在声明@State var data:type时,我不确定该类型的正确语法是什么
[
String : String,
String : String,
String : [
String : [
String : Bool,
String : [
String : [
String : String,
String : Bool,
String : Int
]
]
]
]
]
基于鼓励使用Structs的评论,我建议将此作为我自己问题的答案。此数据变量的内容与原始post相同,但已重新格式化为使用结构
struct data: Hashable {
let base: String
let target: String
let languages: Array<language>
}
struct language: Hashable {
let language: String
let target: Bool
let strings: Dictionary<String, string>
}
struct string: Hashable {
let translation: String
let pinned: Bool
let order: Int
}
@State var database = data(
base: "baseLanguage",
target: "targetLanguage",
languages: [
language(
language: "language",
target: true,
strings: [
"..." : string(translation: "...", pinned: false, order: 0)
]
)
]
)
struct数据:可散列{
让基础:字符串
让目标:字符串
让语言:数组
}
结构语言:Hashable{
让语言:字符串
让目标:布尔
让字符串:字典
}
结构字符串:可哈希{
让翻译:字符串
让我想想:布尔
订单号:Int
}
@状态变量数据库=数据(
base:“baseLanguage”,
目标:“目标语言”,
语言:[
语言(
语言:“语言”,
目标:正确,
字符串:[
“…”:字符串(翻译:“…”,固定:false,顺序:0)
]
)
]
)
基于鼓励使用结构的评论,我建议将此作为我自己问题的答案。此数据变量的内容与原始post相同,但已重新格式化为使用结构
struct data: Hashable {
let base: String
let target: String
let languages: Array<language>
}
struct language: Hashable {
let language: String
let target: Bool
let strings: Dictionary<String, string>
}
struct string: Hashable {
let translation: String
let pinned: Bool
let order: Int
}
@State var database = data(
base: "baseLanguage",
target: "targetLanguage",
languages: [
language(
language: "language",
target: true,
strings: [
"..." : string(translation: "...", pinned: false, order: 0)
]
)
]
)
struct数据:可散列{
让基础:字符串
让目标:字符串
让语言:数组
}
结构语言:Hashable{
让语言:字符串
让目标:布尔
让字符串:字典
}
结构字符串:可哈希{
让翻译:字符串
让我想想:布尔
订单号:Int
}
@状态变量数据库=数据(
base:“baseLanguage”,
目标:“目标语言”,
语言:[
语言(
语言:“语言”,
目标:正确,
字符串:[
“…”:字符串(翻译:“…”,固定:false,顺序:0)
]
)
]
)
好多了。永不回头;)请注意:
- 结构的第一个字母应大写。(如果你不这么做,林特会开枪的。)
- 有时可以嵌入结构,以强制作用域。这取决于你,取决于情况
- 您不必使用数组和字典符号。喜欢括号
- 实际上并不建议定义“字符串”数据类型,因为它已经定义了基元类型。请注意,可以在引号之间使用“String”来重新定义范围中的基元类型,但这是一种不好的做法
struct数据:可散列{
结构文本:可哈希{
让翻译:字符串
让我想想:布尔
订单号:Int
}
结构语言:Hashable{
让语言:字符串
让目标:布尔
let Text:[字符串:Text]
}
让基础:字符串
让目标:字符串
让语言:[语言]
}
如果需要使用文本
在外部键入:
var text: Data.Text
最后,在
语言
类型中定义翻译数组有点奇怪。也许你应该给它命名为Translations
,并用不同的结构。例如,有一个Text
struct,其中包含一个Translations
dict,其中语言代码是键。只是一个建议。。祝你好运:)好多了。永不回头;)请注意:
- 结构的第一个字母应大写。(如果你不这么做,林特会开枪的。)
- 有时可以嵌入结构,以强制作用域。这取决于你,取决于情况
- 您不必使用数组和字典符号。喜欢括号
- 实际上并不建议定义“字符串”数据类型,因为它已经定义了基元类型。请注意,可以在引号之间使用“String”来重新定义范围中的基元类型,但这是一种不好的做法
struct数据:可散列{
结构文本:可哈希{
让翻译:字符串
让我想想:布尔
订单号:Int
}
结构语言:Hashable{
让语言:字符串
让目标:布尔
let Text:[字符串:Text]
}
让基础:字符串
让目标:字符串
让语言:[语言]
}
如果需要使用文本
在外部键入:
var text: Data.Text
最后,在
语言
类型中定义翻译数组有点奇怪。也许你应该给它命名为Translations
,并用不同的结构。例如,有一个Text
struct,其中包含一个Translations
dict,其中语言代码是键。只是一个建议。。祝你好运:)这件事不要用字典。创建你自己的结构。我研究过创建一个结构,但我没有看到在字典上使用它的意义。现在你明白了。如果使用结构,则不会在查找字典的类型时陷入困境。。这是否回答了您的问题?您想要的类型是[String:Any]。因为有一个字符串和一个数组作为一个字符串键的值。因此,没有其他方法来描述一个类型,它可以有数组或字符串,而不是任何数组或字符串。你可以用struct,不要用字典。创建你自己的结构。我研究过创建一个结构,但我没有看到在字典上使用它的意义。现在你明白了。如果使用结构,则不会在查找字典的类型时陷入困境。。这是否回答了您的问题?您想要的类型是[String:Any]。因为有一个字符串和一个数组作为一个字符串键的值。因此,没有其他方法来描述一个类型,它可以有数组或字符串,而不是任何数组或字符串。你可以直接使用struct。好多了:)我在下面的另一个答案中给你一些提示。也许你可以用它。好多了:)我在下面的另一个答案中给你一些提示。也许你是米格