gpt4 book ai didi

ios - 无法在Xcode的CS193p项目的SwiftUI'文本'中推断通用类型'S'

转载 作者:行者123 更新时间:2023-12-01 16:19:51 25 4
gpt4 key购买 nike

背景
我正在学习斯坦福大学的CS193p iOS开发在线 class 。我使用Xcode 11.3和Swift 5.1.2。
问题
在第5堂课结束时,我想到了一个错误,这是Swift编译器报告“无法推断出通用参数'S'”。
Snapshot: IDE complains about it
代码段EmojiMemoryGameView.swift中的代码

import SwiftUI

struct EmojiMemoryGameView: View {
@ObservedObject var viewModel: EmojiMemoryGame
var body: some View {
Grid(viewModel.cards) { card in
CardView(card: card).onTapGesture(perform: {
self.viewModel.choose(card: card)
})
.padding(5)
}
.padding()
.foregroundColor(Color.orange)
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
let game = EmojiMemoryGame()
game.choose(card: game.cards[0])
return EmojiMemoryGameView(viewModel: game)
}
}


struct CardView: View {
var card: MemoryGame<String>.Card

var body: some View {
GeometryReader { geometry in
self.body(for: geometry.size)
}
}

@ViewBuilder
private func body(for size: CGSize) -> some View {
if card.isFaceUp || !card.isMatched {
ZStack {
Pie(startAngle: Angle.degrees(-90),
endAngle: Angle.degrees(-10),
clockwise: true)
.padding(5)
.opacity(0.3)
Text(card.content)
.font(Font.system(size: fontSize(for: size)))
}.cardify(isFaceUp: card.isFaceUp)
//.modifier(Cardify(isFaceUp: card.isFaceUp))
}
}


private func fontSize(for size: CGSize) -> CGFloat {
return min(size.width, size.height) * fontScaleFactor
}
// MARK: - Drawing Constants

private let fontScaleFactor: CGFloat = 0.75
}

}

MemoryGame.swift中的代码
import Foundation

struct MemoryGame<CardContent> where CardContent: Equatable { // costraints and gains
private(set) var cards: Array<Card>
private var indexOfTheOneAndOnlyFaceUpCard: Int? {
get {
cards.indices.filter { cards[$0].isFaceUp }.only
}
set {
for index in cards.indices {
// newValue is a var only appears in set method
cards[index].isFaceUp = index == newValue
}
}
}

init(numberOfPairsOfCards: Int, cardContentFactory: (Int) -> CardContent) {
cards = Array<Card>()
let maxIndex = 2 * numberOfPairsOfCards - 1
var pairIndices = [Int]()
for i in 0...maxIndex {
let randomNumber = Double.random(in: 0...1)
if randomNumber >= 0.5 {
pairIndices.insert(i/2, at: 0)
} else {
pairIndices.append(i/2)
}
}
for i in 0...maxIndex {
let pairIndex = pairIndices[i]
let content = cardContentFactory(pairIndex)
cards.append(Card(id: i, content: content))
}
}

mutating func choose(card: Card) {
print("card chosen: \(card)")
if let chosenIndex = cards.firstIndex(matching: card), !cards[chosenIndex].isFaceUp, !cards[chosenIndex].isMatched {
// comma here is like a sequential "AND"
if let potentialMatchIndex = indexOfTheOneAndOnlyFaceUpCard {
if cards[chosenIndex].content == cards[potentialMatchIndex].content {
cards[chosenIndex].isMatched = true
cards[potentialMatchIndex].isMatched = true
}
} else {
indexOfTheOneAndOnlyFaceUpCard = chosenIndex
}
self.cards[chosenIndex].isFaceUp = true
}
}

struct Card: Identifiable {
/* Member variable 'id' is essential for the Identifiable protocol */
var id: Int

var isFaceUp: Bool = false
var isMatched: Bool = false
var content: CardContent
}
}

但是,当我按住Alt键单击变量时,它清楚地表明类型是 StringSnapshot: Type Declaration
我当前的项目代码也可以在 Github上找到。
那么错误是怎么发生的以及如何解决呢?
将感谢您的帮助!

最佳答案

struct CardView: View中,您有

if card.isFaceUp || !card.isMatched {
ZStack {
Pie(startAngle: Angle.degrees(-90),
endAngle: Angle.degrees(-10),
clockwise: true)
.padding(5)
.opacity(0.3)
Text(card.content)
.font(Font.system(size: fontSize(for: size)))
}.cardify(isFaceUp: card.isFaceUp)
//.modifier(Cardify(isFaceUp: card.isFaceUp))
}
return之前添加 ZStack,这应该可以解决您的问题。
if card.isFaceUp || !card.isMatched {
return ZStack {
Pie(startAngle: Angle.degrees(-90),
endAngle: Angle.degrees(-10),
clockwise: true)
.padding(5)
.opacity(0.3)
Text(card.content)
.font(Font.system(size: fontSize(for: size)))
}.cardify(isFaceUp: card.isFaceUp)
//.modifier(Cardify(isFaceUp: card.isFaceUp))
}

关于ios - 无法在Xcode的CS193p项目的SwiftUI'文本'中推断通用类型'S',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63146631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com