Govind Rai
Govind Rai

Reputation: 15800

count number of instances of a class swift

How do you count the number of instances of a class in Swift? I have the following class:

class car {
    static var carPopulation: Int = 0
    var color: String
    var capacity: Int
    var driver: Bool?
    var carOn: Bool = false
    init (carColor: String, carCapacity: Int) {
        self.capacity = carCapacity
        self.color = carColor
        carPopulation ++ //##########GIVES ME ERROR#############
    }
    func startCar() {
        self.carOn = true
    }
}

class raceCar : car {
    var nitro: Bool
    init(carColor: String, carCapacity: Int, hasNitro: Bool) {
        self.nitro = hasNitro
        super.init(carColor: carColor, carCapacity: carCapacity)
    }
}

car.CarPopulation //outputs 0 in xcode playground

I am assuming I need a function to actually return the value, but I want the counter to increase every time an instance of the class is created.

I get the following error:

error: static member 'carPopulation' cannot be used on instance of type 'car'

Upvotes: 8

Views: 4183

Answers (2)

Adolfo
Adolfo

Reputation: 1862

Inside initializer method you have to add one to your static var with

Car.carPopulation += 1

And you must implement de deinitializer to delete the car entity that is going to disappear

deinit
{
    Car.carPopulation -= 1
}

Upvotes: 10

Jason K
Jason K

Reputation: 138

you need to call car.carpopulation += 1 as the carpopulation is bound to the class car.

here is the working code

var str = "Hello, playground"

class car {
    static var carPopulation: Int = 0
    var color: String
    var capacity: Int
    var driver: Bool?
    var carOn: Bool = false
    init (carColor: String, carCapacity: Int) {
        self.capacity = carCapacity
        self.color = carColor
        car.carPopulation += 1 //no longer an error!
    }
    func startCar() {
        self.carOn = true
    }
}

class raceCar : car {
    var nitro: Bool
    init(carColor: String, carCapacity: Int, hasNitro: Bool) {
        self.nitro = hasNitro
        super.init(carColor: carColor, carCapacity: carCapacity)
    }
}

car.carPopulation //outputs 0 in xcode playground

// now initialize a car
var raceC = raceCar(carColor: "black", carCapacity: 4, hasNitro: false)

// check again
car.carPopulation 

Upvotes: 2

Related Questions