首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >金丝图中使用多维字典的导航

金丝图中使用多维字典的导航
EN

Stack Overflow用户
提问于 2020-06-09 03:18:25
回答 1查看 231关注 0票数 1

在这样做的过程中,我发现了一些新的问题:假设我有一个multiDim数据库["A":["Sub1_A1",["Sub1_A2":"Sub2_A1","Sub2_A2"],"B":“Sub1_B1”)。我希望通过使用这样的字典来构建一个导航列表,同时还有一个显示我在导航视图中选择的字典键的表格视图。例如:

1.

2.,一旦我选择了女装,我就会出现在这个导航页面上:

3. --如果我选择了裙子,我将被导航到这个页面,因为它是使用键"Women“、”“的多点字典的末尾,因此没有显示导航链接,只显示了文本()或Button()的列表。最后,如果我在“迷你裙”选项卡上,我将被引导到另一个视图,显示我选择的类别键序列的详细信息。

出现的选项卡名称将根据您选择的类别而定。如果您向后导航从“裙子”到“妇女”,标签名“裙子”将消失,只显示“妇女”和一个占位符标签名“请选择”。

知道怎么做吗?

这是我最初的尝试:

代码语言:javascript
复制
struct PlayingWithMultiDimNavLink: View {

//    let multiDimDict:[String:Any] = ["A": ["Sub1_A1", "Sub1_A1"], "B": ["Sub1_B1", "Sub1_B1"]]

    let multiDimDict = ["A": "1", "B": "2"]


    var body: some View {

        NavigationView{
            List {
                ForEach(multiDimDict.keys.sorted(), id: \.self) { key in

                    NavigationLink(destination: GenerateChildView(key: key, dict: self.multiDimDict)){

                        Text(key)
                    }

                }
            }
        }

    }
}





struct GenerateChildView: View {

var key: String
var dict: [String: Any]

init(key: String, dict: [String: Any] ){
    self.key = key
    self.dict = dict
}


var body: some View {
    VStack{// Unable to infer complex closure return type; add explicit type to disambiguate
        if isString(key:key, dict: dict){
            List{
                HStack{
                    Text(String(describing: dict[key]))
                }

            }
        }

        if isStringList(key:key, dict: dict){

            List{
                ForEach(dict[key], id: \.self){ content in
                    HStack{
                        Text(content)
                    }

                }

            }

        }



        else{

            Text("Bla Bla Bla")
        }

    }
}




func isStringList(key: String, dict: [String: Any])->Bool{
    if let stringList = dict[key] as? [String]{
        print(stringList)
        return true
    }
    else{
        return false
    }

}



func isString(key: String, dict: [String: Any])-> Bool{
    if let string = dict[key] as? String{
        print(string)
        return true
    }
    else{
        return false
    }
}

}

我将multiDimDict:String:Any声明为multiDimDict,因为该字典可以是任何深度级别的嵌套字典。

但是这不能编译,在generateChildView()中有一个错误“无法推断复杂的闭包返回类型;添加显式类型来消除歧义”。有什么好办法吗?

EN

Stack Overflow用户

回答已采纳

发布于 2020-06-09 10:08:05

SwiftUI不适用于Any类型,因此一旦检测到数据类型,就必须对其进行强制转换,以便让SwiftUI知道如何继续工作。

这里是原始代码的一个固定部分。用Xcode 11.4 / iOS 13.4测试

代码语言:javascript
复制
if isStringList(key:key, dict: dict) {
    List{
        // verified detected [String], so cast it explicitly to 
        // give chance to check types here
        ForEach(dict[key] as! [String], id: \.self) { content in
            HStack{
                Text(content)
            }
        }
    }
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62274449

复制
相关文章

相似问题

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