MST

星途 面试题库

面试题:SwiftUI的Popover组件高级交互

假设你有一个复杂的SwiftUI视图结构,在其中一个子视图中需要弹出Popover。要求Popover可以接收来自子视图的数据,并且在Popover关闭时将处理后的数据返回给子视图。请描述实现思路并给出关键代码片段。
16.3万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义数据模型:用于在子视图和Popover之间传递数据。
  2. 在子视图中:创建一个状态变量来控制Popover的显示与隐藏,同时准备好要传递给Popover的数据。
  3. Popover视图:接收来自子视图的数据,处理后准备返回的数据。
  4. 使用@Binding:在Popover中通过@Binding绑定子视图的状态变量,以便关闭Popover时能通知子视图并传递处理后的数据。

关键代码片段

// 定义数据模型
struct PopoverData {
    var input: String
    var output: String
}

struct ContentView: View {
    @State private var isPopoverPresented = false
    @State private var popoverData = PopoverData(input: "", output: "")
    
    var body: some View {
        VStack {
            Button("Show Popover") {
                popoverData.input = "Initial Data"
                isPopoverPresented = true
            }
            Text(popoverData.output)
        }
        .popover(isPresented: $isPopoverPresented) {
            PopoverView(popoverData: $popoverData, isPresented: $isPopoverPresented)
        }
    }
}

struct PopoverView: View {
    @Binding var popoverData: PopoverData
    @Binding var isPresented: Bool
    
    var body: some View {
        VStack {
            Text("Input: \(popoverData.input)")
            Button("Process and Close") {
                popoverData.output = "Processed: \(popoverData.input)"
                isPresented = false
            }
        }
    }
}