Superbia
Superbia

Reputation: 13

.append doesnt seem to be working for me in swift UI and i have no idea why can anyone assist?

The function is being called successfully in a separate page but nothing ever gets added to the array can anyone help? Im trying to Create an array that would contain a list of cards automating it instead of having to list out all of the names of the cards

import Foundation
import SwiftUI

struct DeckSetup {
    @State var deckOCards: [String] = ["e"]
    @State public var yourhand: [String] = []
    @State public var dealerHand: [String] = []
    
    func setupDeck() {
        // Club Cards
        for i in 2...10 {
            deckOCards += [String(i) + " of Clubs"]
        }
        
        deckOCards.insert("Ace of Clubs", at: 0)
        deckOCards.append( "King of Clubs")
        deckOCards.append("Queen of Clubs")
        deckOCards.append("Jack of Clubs")
        
        //Heart Cards
        for i in 2...10 {
            deckOCards.append(String(i) + " of Hearts")
        }
        
        deckOCards.append("Ace of Hearts")
        deckOCards.append("King of Hearts")
        deckOCards.append("Queen of Hearts")
        deckOCards.append("Jack of Hearts")
        
        print(deckOCards.joined())
    }
}

Upvotes: 0

Views: 232

Answers (1)

jnpdx
jnpdx

Reputation: 52575

Since DeckSetup isn't a View, @State won't work as expected, which is only for use within a SwiftUI View.

Instead, assuming you're using this in SwiftUI, you probably want an ObservableObject. This works as expected, for example:

class DeckSetup : ObservableObject {
    @Published var deckOCards: [String] = ["e"]
    @Published public var yourhand: [String] = []
    @Published public var dealerHand: [String] = []
    
    func setupDeck() {
        // Club Cards
        for i in 2...10 {
            deckOCards += [String(i) + " of Clubs"]
        }
        
        deckOCards.insert("Ace of Clubs", at: 0)
        deckOCards.append( "King of Clubs")
        deckOCards.append("Queen of Clubs")
        deckOCards.append("Jack of Clubs")
        
        //Heart Cards
        for i in 2...10 {
            deckOCards.append(String(i) + " of Hearts")
        }
        
        deckOCards.append("Ace of Hearts")
        deckOCards.append("King of Hearts")
        deckOCards.append("Queen of Hearts")
        deckOCards.append("Jack of Hearts")
        
        print(deckOCards.joined())
    }
}

You would use it in your view like:

struct ContentView: View {
  @StateObject var deckSetup = DeckSetup()

  //body, etc
}

Upvotes: 1

Related Questions