问题描述
我目前正在尝试斯坦福大学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 (将#修改为@)