Robert
Robert

Reputation: 95

How to get the sum out of my switch in Swift?

Hi I'm stuck trying to solve this: class Classy, to represent how classy someone or something is. "Classy". If you add fancy-looking items, "classiness" increases!

Create a method, addItem() in Classy that takes a string as input, adds it to the "items" array and updates the classiness total.

Add another method, getClassiness() that returns the "classiness" value based on the items.

The following items have classiness points associated with them:

  1. "tophat" = 2
  2. "bowtie" = 4
  3. "monocle" = 5

Everything else has 0 points.

The sum is not performing correctly. The first problem is when it falls in te default case, everything is 0, I've tried in the default with:

default:
    self.classiness += 0

and I got 2 for every case I've tried to sum the total inside in each case, and return the total but got the same result.

This is my last version

class Classy {
    var items: [String]
    var classiness: Int

    init() {
        self.items = []
        self.classiness = 0
    }

    func addItem(_ item: String) {
        var total = 0
        self.items.append(item)
        total += classiness
    }

    func getClassiness() -> Int {

        switch items {
        case ["tophat"]:
            self.classiness = 2

        case ["bowtie"]:
            self.classiness = 4

        case ["monocle"]:
            self.classiness = 5

        default:
            self.classiness = 0
        }
        return self.classiness
    }
}

let me = Classy()
print(me.getClassiness())
me.addItem("tophat")
print(me.getClassiness())
me.addItem("bowtie")
me.addItem("jacket")
me.addItem("monocle")
print(me.getClassiness()) //This would be 11

Upvotes: 1

Views: 180

Answers (1)

aiwiguna
aiwiguna

Reputation: 2922

Your switch case need update, it need to loop and the case is String not Array

func getClassiness() -> Int {
        var total = 0
        for item in items{
            switch item {
            case "tophat":
            total += 2

            case "bowtie":
            total += 4

            case "monocle":
            total += 5

            default:
            total +=0
            }

        }
        self.classiness = total
        return self.classiness
    }

Upvotes: 2

Related Questions