我有一个如下结构的字典,我需要声明它的类型,以避免在索引嵌套字典时“二进制运算符”!=‘不能应用于'Any?’和‘String’类型的操作数等错误。
@State var data = [
"base" : "baseLanguage",
"target" : "targetLanguage",
"languages" : [
"language" : [
"target" : true,
"strings" : [
"..." : [
"translation" : "...",
"pinned" : false,
"order" : 0
]
]
]
]
]Xcode将类型标识为"String : Any“,但我希望它是以下类型。当声明@State数据: type时,我不确定这种类型的正确语法是什么。
[
String : String,
String : String,
String : [
String : [
String : Bool,
String : [
String : [
String : String,
String : Bool,
String : Int
]
]
]
]
]发布于 2021-03-27 10:51:12
好多了。)请注意:
,
String重新定义范围内的基本类型,但这是一种不好的做法。struct Data: Hashable {
struct Text: Hashable {
let translation: String
let pinned: Bool
let order: Int
}
struct Language: Hashable {
let language: String
let target: Bool
let texts: [String: Text]
}
let base: String
let target: String
let languages: [Language]
}如果您需要在外部使用Text类型:
var text: Data.Text最后,在Language类型中定义一个翻译数组有点奇怪。也许你应该把它命名为Translations,结构有点不同。例如,有一个包含Text dict的Translations结构,其中的键是语言代码。只是个建议..。祝你好运:)
发布于 2021-03-27 09:43:05
我建议这样做是为了回答我自己的问题,基于鼓励使用Structs的评论。此数据变量的内容与原始post相同,但已重新格式化为使用Structs。
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)
]
)
]
)https://stackoverflow.com/questions/66829404
复制相似问题