UPGRADE YOUR SKILLS: Learn advanced Swift and SwiftUI on Hacking with Swift+! >>

Project 9: Challenge 2 - Solved

Forums > 100 Days of Swift

I'm using GCD / DispatchQueue. have a look guys who ever is stuck on this.

func loadLevel() { var cluesString = "" // Holds the clues var solutionString = "" // Holds the number of letter that a solution has to be var letterBits = [String]() // Holds all letter bits

    DispatchQueue.global(qos: .background).async { [weak self] in
        if let levelFileURL = Bundle.main.url(forResource: "level\(self!.level)", withExtension: "txt") {
        if let levelContents = try? String(contentsOf: levelFileURL) { // creates "level1.txt" string to load the file from the App Bundle
            var lines = levelContents.components(separatedBy: "\n")
            lines.shuffle() // each time the game starts will mix up the letter groups

            for (index, line) in lines.enumerated() { // return the item and its index
                let parts = line.components(separatedBy: ": ")
                let answer = parts[0]
                let clue = parts[1]

                cluesString += "\(index + 1).  \(clue)\n"

                let solutionWord = answer.replacingOccurrences(of: "|", with: "")
                solutionString += "\(solutionWord.count) letters\n"
                self?.solutions.append(solutionWord)

                let bits = answer.components(separatedBy: "|")
                letterBits += bits
            }
        }
    }

    DispatchQueue.main.async { [weak self] in
        self?.cluesLabel.text = cluesString.trimmingCharacters(in: .whitespacesAndNewlines)
        self?.answersLabel.text = solutionString.trimmingCharacters(in: .whitespacesAndNewlines)

    letterBits.shuffle()

        if letterBits.count == self?.letterButtons.count {
            for i in 0 ..< self!.letterButtons.count {
                self?.letterButtons[i].setTitle(letterBits[i], for: .normal)
            }
         }
      }
   }
}

}

3      

BUILD THE ULTIMATE PORTFOLIO APP Most Swift tutorials help you solve one specific problem, but in my Ultimate Portfolio App series I show you how to get all the best practices into a single app: architecture, testing, performance, accessibility, localization, project organization, and so much more, all while building a SwiftUI app that works on iOS, macOS and watchOS.

Get it on Hacking with Swift+

Sponsor Hacking with Swift and reach the world's largest Swift community!

Archived topic

This topic has been closed due to inactivity, so you can't reply. Please create a new topic if you need to.

All interactions here are governed by our code of conduct.

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.