首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift中使用嵌套字典类型确定字典

在Swift中使用嵌套字典类型确定字典
EN

Stack Overflow用户
提问于 2021-03-27 08:32:48
回答 2查看 137关注 0票数 0

我有一个如下结构的字典,我需要声明它的类型,以避免在索引嵌套字典时“二进制运算符”!=‘不能应用于'Any?’和‘String’类型的操作数等错误。

代码语言:javascript
复制
@State var data = [
    "base" : "baseLanguage",
    "target" : "targetLanguage",
    "languages" : [
        "language" : [
            "target" : true,
            "strings" : [
                "..." : [
                    "translation" : "...",
                    "pinned" : false,
                    "order" : 0
                ]
            ]
        ]
    ]
]

Xcode将类型标识为"String : Any“,但我希望它是以下类型。当声明@State数据: type时,我不确定这种类型的正确语法是什么。

代码语言:javascript
复制
[
    String : String,
    String : String,
    String : [
        String : [
            String : Bool,
            String : [
                String : [
                    String : String,
                    String : Bool,
                    String : Int
                ]
            ]
        ]
    ]
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-27 10:51:12

好多了。)请注意:

  • 的首字母结构应该大写。(如果你不这样做的话,Linter就会开枪)
  • 有时可以嵌入结构,以执行范围界定。这取决于你的情况,

  • ,你不需要使用Array<>和Dictionary<>符号。更喜欢使用“string”数据类型并不是真正的建议,因为它已经定义了基本类型。请注意,您可以在引号之间使用String重新定义范围内的基本类型,但这是一种不好的做法。

代码语言:javascript
复制
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类型:

代码语言:javascript
复制
var text: Data.Text

最后,在Language类型中定义一个翻译数组有点奇怪。也许你应该把它命名为Translations,结构有点不同。例如,有一个包含Text dict的Translations结构,其中的键是语言代码。只是个建议..。祝你好运:)

票数 1
EN

Stack Overflow用户

发布于 2021-03-27 09:43:05

我建议这样做是为了回答我自己的问题,基于鼓励使用Structs的评论。此数据变量的内容与原始post相同,但已重新格式化为使用Structs。

代码语言:javascript
复制
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)
            ]
        )
    ]
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66829404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档