【发布时间】:2020-11-21 00:42:25
【问题描述】:
我关注Stanfords' CS193p Developing Apps for iOS online course。 我正在使用 Xcode 11.5。 (我没有更新,因为这是课程讲师(Paul Heagarty)正在使用的版本。)
我正在尝试执行Assignment 3 (Set Game)。我知道我的代码可能在很多地方都写得不好,但我稍后会改进它,现在我只是想让它没有错误地工作。 我目前无法修复的错误是:
var shading: SetGameModel.Card.Shading = card.shading //Error: Cannot use instance member 'card' within property initializer; property initializers run before 'self' is available
这里是完整的查看代码: 如果您还需要 ViewModel、Model 或其他一些文件来帮助我修复它,请告诉我:-)
请尝试以某种方式帮助我修复它,我作为初学者会理解 ????
//
// SetGameView.swift
// TheSetGame
//
import SwiftUI
struct SetGameView: View {
@ObservedObject var viewModel: SetGameViewModel
var body: some View {
Grid(viewModel.cards) { card in
CardView(card: card, shading: .solid).onTapGesture {
self.viewModel.choose(card: card)
}
}
.padding()
.foregroundColor(Color.orange)
}
}
struct CardView: View {
var card: SetGameModel.Card
// Shape features (numberOfShapes, shape, shading, color):
var numberOfShapes: Int {
switch card.numberOfShapes {
case .one:
return 1
case .two:
return 2
case .three:
return 3
}
}
var shading: SetGameModel.Card.Shading = card.shading //Error: Cannot use instance member 'card' within property initializer; property initializers run before 'self' is available
var isFilled: Bool { shading == .solid ? true : false }
var isStriped: Bool { shading == .striped ? true : false }
var color: Color {
switch card.color {
case .green:
return Color.green
case .purple:
return Color.purple
case .red:
return Color.red
}
}
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 10.0).fill(Color.white)
RoundedRectangle(cornerRadius: 10.0)
.stroke(lineWidth: card.isChosen ? 6 : 3)
.foregroundColor(card.isChosen ? Color.red : Color.orange)
VStack {
ForEach(0..<numberOfShapes) { index in
if self.card.shape == .diamond {
Diamond()//.scale(0.75)
}
if self.card.shape == .squiggle {
Rectangle()//.scale(0.75)
}
if self.card.shape == .oval {
Ellipse()//.scale(0.75)
}
}
}
.foregroundColor(self.color)
.padding()
}
.aspectRatio(2/3, contentMode: .fit)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
SetGameView(viewModel: SetGameViewModel())
}
}
【问题讨论】:
-
将
var shading: SetGameModel.Card.Shading更改为lazy var shading: SetGameModel.Card.Shading是否有效?
标签: swift xcode swiftui cs193p