我想创建一个循环来创建 10 个不同的字符串并使用该字符串显示 10 个不同的卡片
Posted
技术标签:
【中文标题】我想创建一个循环来创建 10 个不同的字符串并使用该字符串显示 10 个不同的卡片【英文标题】:I want to create a loop that creates 10 different strings and use that strings to show 10 different cards 【发布时间】:2021-10-28 11:29:30 【问题描述】:import Foundation
class Card: Identifiable, ObservableObject
var id = UUID()
var result: String = ""
init()
for _ in 1...10
let suit = ["D","K","B","S"][Int(arc4random() % 4]
let numStr = ["1","2","3","4"][Int(arc4random() % 4]
result = suit + numStr
import SwiftUI
struct EasyModeView: View
@ObservedObject var cardModel: Card
var body : some View
HStack
ForEach((1...10, id: \.self) _ in
Button label: Image(cardModel.result)
我创建了循环,但它总是显示 10 张相同的卡片,我想要所有 10 张不同的卡片。 我在资产中的图像命名为与两个变量的组合相同,例如“D1”、“D2”、“S1”、“S2”等。
【问题讨论】:
因为您没有将图像名称存储在数组中。 对未来的建议:您需要学习如何调试代码和/或使用打印语句来查看会发生什么,因为这样的问题是您必须能够识别和解决自己的问题作为开发人员。 【参考方案1】:这是您尝试的正确方法:
struct ContentView: View
var body: some View
EasyModeView()
struct EasyModeView: View
@StateObject var cardModel: Card = Card()
var body : some View
HStack
ForEach(cardModel.results) card in
Button(action: , label:
Text(card.result)
.padding(3.0)
.background(Color.yellow.cornerRadius(3.0))
)
Button("re-set") cardModel.reset() .padding()
struct CardType: Identifiable
let id: UUID = UUID()
var result: String
class Card: ObservableObject
@Published var results: [CardType] = [CardType]()
private let suit: [String] = ["D","K","B","S"]
init() initializing()
private func initializing()
if (results.count > 0) results.removeAll()
for _ in 0...9 results.append(CardType(result: suit.randomElement()! + String(describing: Int.random(in: 1...4))))
func reset() initializing()
结果:
【讨论】:
【参考方案2】:您只使用一张卡,而不是创建 10 张。像这样修复
struct EasyModeView: View
var body : some View
HStack
ForEach(0..<10) _ in
Button label:
Image(Card().result)
【讨论】:
无需每次都创建卡片模型对象。使用数组和存储数据然后使用。 @RajaKishan 这是一个简单的例子,展示了如何获取随机卡片,确定可以将卡片存储到数组中,这取决于业务逻辑以上是关于我想创建一个循环来创建 10 个不同的字符串并使用该字符串显示 10 个不同的卡片的主要内容,如果未能解决你的问题,请参考以下文章