Search code examples
arraysswiftuikit

Why is this array clearing


I have an issue where I am calling a function, it's appending an array, and then I get a random element from it, the problem is that is keeps getting wiped right after the function is called before I can use it, therefore, the random element request is causing a fatal error.

Utilities.getKnockKnockJokes {

            self.previousKnockKnockJoke = self.currentKnockKnockJoke

            print("currentKnockKnockJoke = \(self.currentKnockKnockJoke)")

            self.currentKnockKnockJoke = KnockKnockJokes.knockKnockJokes.randomElement()!

            print("newCurrentKnockKnockJoke = \(self.currentKnockKnockJoke)")

            self.singleServeText.text = self.currentKnockKnockJoke

        }

The function called is below:

static func getKnockKnockJokes(completion: @escaping () -> Void) {
        let db = Firestore.firestore()
        let group = DispatchGroup()
        group.enter()
        DispatchQueue.global(qos: .background).async {
            print("countKnockKnockJokes = \(self.countKnockKnockJokes)")
            if self.countKnockKnockJokes == 0 {
                while self.countKnockKnockJokes == 0 {
                    if self.countKnockKnockJokes == 0 {
                        self.countKnockKnockJokes = 1
                        group.leave()
                    }else {
                        print("leaving")
                        group.leave()
                    }
                }
            }else {
                print("skipped")
                group.leave()
            }
        }
        group.notify(queue: .main) {
            db.collection("jokes").document("Knock Knock Jokes").addSnapshotListener { document, error in
                //check for error
                if error == nil {
                    //check if document exists
                    if document != nil && document!.exists {
                        if let JokeNum = document!.get("JokeNum") as? Int {
                            self.countKnockKnockJokes = JokeNum
                            UserDefaults.standard.setValue(JokeNum, forKey: "countKnockKnockJokes")
                            print("KnockKnockJokeNum = \(self.countKnockKnockJokes)")
                        }
                        var count = 1
                        print("count = \(count)/\(self.countKnockKnockJokes)")
                        print("countKnockKnockJoke = \(self.countKnockKnockJokes)")
                        //Utilities.knockKnockJokes.removeAll()
                        KnockKnockJokes.knockKnockJokes.removeAll()
                        for _ in 0...self.countKnockKnockJokes {
                            print("count = \(count)/\(self.countKnockKnockJokes)")
                            if let Joke = document!.get("\(count)") as? String {
                                print("KnockKnockJokeNum = \(self.countKnockKnockJokes)")
                                if Utilities.jokes.contains("\(Joke) - From Knock Knock Jokes") {}else {
                                    print("Joke = \(Joke)")
                                    Utilities.jokes.append("\(Joke) - From Knock Knock Jokes")
                                    KnockKnockJokes.knockKnockJokes.append(Joke)
                                    print("KnockKnockJokes = \(KnockKnockJokes.knockKnockJokes)")
                                    UserDefaults.standard.set(KnockKnockJokes.knockKnockJokes, forKey: defaults.knockKnockJokes.rawValue)
                                    Utilities.updateJokesDefaults()
                                }
                                print("countKnockKnockFinal = \(count)/\(self.countKnockKnockJokes)")
                                if count == self.countKnockKnockJokes {
                                    completion()
                                }
                                count = count + 1
                            }
                        }
                    }
                }
            }
        }
    }

Solution

  • I fixed it, my remove all was running after all the appends.