首页 > 解决方案 > HStack 的泛型是什么?

问题描述

作为 iOS 开发课程的一部分,我正在 SwiftUI 中构建一个计算器应用程序。用户界面如下:

在此处输入图像描述

我们可以看到,有五行按钮,每个按钮都有一个文本,结果面板也是一个文本。因此,将文本、按钮和行提取到单独的视图中效果很好。以下是创建行的代码。

struct RowView: View {
    let buttons: [CalculatorButton]
    @Binding var result: String
    let calc: Calculator
    
    var body: some View {
        createCells(self.buttons)
    }
    
    private func createCells(_ buttons: [CalculatorButton]) -> some View {
        if buttons.count % 2 == 0 {
            return AnyView(HStack(spacing: 1) {
                ForEach(buttons, id: \.label) { button in
                    ButtonView(button: button, result: self.$result, calc: self.calc)
                }
            })
        } else {
            return AnyView(HStack(spacing: 1) {
                ButtonView(button: buttons[0], result: self.$result, calc: self.calc)
                createCells(buttons.suffix(2))
            })
        }
    }
}

这个想法是,如果一行中有偶数个按钮,它们只是水平堆叠。对于最后一行,我们手动放置第一个按钮,然后进行递归调用,将其余两个按钮水平放置。甜的!

但是,AnyView(HStack(spacing: 1)代码在if-else块中重复。我试图为 的内容创建一个局部变量HStack,但找不到为if和成功编译的类型else。有可能这样做吗?我正在使用 Xcode 11.5 和 Swift 5。

标签: iosswiftswiftui

解决方案


推荐阅读