我想创建一个循环来创建 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 个不同的卡片的主要内容,如果未能解决你的问题,请参考以下文章

向函数传递字符串

使用 TPL 在多个不同线程上创建单例对象

多次编辑多行字符串中的值并创建大量新字符串?

在数组中搜索一个数字 10 次并计算每次搜索的时间

如何循环动态生成的按钮并相应地创建输入字段

创建一个循环来子集数据并合并空间数据图以创建 gif