iOS SwiftUI函数返回一些未在UI中显示的视图

问题描述

我目前正在尝试斯坦福大学193p 2020课程的作业3。我在尝试让我的函数createCardContent实际显示应该显示的Shape对象时遇到了麻烦。它没有显示任何形状的对象,而是显示空的卡片(我不知道为什么)image here

如果我删除文本 @viewbuilder ,则会收到错误消息

函数声明了不透明的返回类型,但是没有返回语句 从其主体中推断出基础类型

如果我在if-else if语句中添加 return ,则会出现错误提示

函数声明了不透明的返回类型,但是return语句在 它的主体没有匹配的基础类型

struct CardView: View {
        var card: SetGameEngine.Card
    
    var body: some View {
        GeometryReader { geometry in
            self.testBody(for: geometry.size)
        }
    }
    
    func testBody(for size: CGSize) -> some View {
        ZStack {
            HStack {
                ForEach(0..<card.symbolCount) { _ in
                    self.createCardContent()
                }
                
            }
       } .cardify()
    }


    @viewbuilder
    func createCardContent() -> some View {
        let colour = self.colour()
        let symbol = self.card.symbol
        let shade = self.card.shade
        
        if symbol == .oval,shade == .solid {
            Capsule().fill(colour)
        } else if symbol == .squiggle,shade == .solid {
            Rectangle().fill(colour)
        } else if symbol == .diamond,shade == .solid {
            Diamond().fill(colour)
        } else if symbol == .oval,shade == .empty {
            Capsule().stroke(colour)
        } else if symbol == .squiggle,shade == .empty {
            Rectangle().stroke(colour)
        } else if symbol == .diamond,shade == .empty {
            Diamond().stroke(colour)
        } else {
            Capsule().fill(Color.pink)
        }
            
    }

编辑:这很奇怪。当删除函数createCardContent及其引用中编写的局部变量时,卡片内容将由所需的形状填充。这是我的新功能createCardContent。谁能向我解释为什么这行得通,但以前的功能却行不通?

@viewbuilder
func createCardContent() -> some View {
    
    if card.symbol == .oval && card.shade == .solid {
        Capsule().fill(colour())
    } else if card.symbol == .squiggle && card.shade  == .solid {
         return Rectangle().fill(colour())
    } else if card.symbol == .diamond && card.shade  == .solid {
         return Diamond().fill(colour())
    } else if card.symbol == .oval && card.shade  == .empty {
          return Capsule().stroke(colour())
    } else if card.symbol == .squiggle && card.shade  == .empty {
         return Rectangle().stroke(colour())
    } else if card.symbol == .diamond && card.shade == .empty {
         return Diamond().stroke(colour())
    } else {
        Diamond().stroke(colour())
    }
        
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)