It is a reference type, points to specific set of data. Everything happens on the orignal data.

Basic Structure

class Developer {
    var name: String
    var jobTitles: String
    var yearsExp: Int
    
    init(name: String, jobTitles: String, yearsExp: Int) {
        self.name = name
        self.jobTitles = jobTitles
        self.yearsExp = yearsExp
    }
}

let sean = Developer(name: "Sean", jobTitles: "IOS Engineer", yearsExp: 5)

print(sean.name)
print(sean.jobTitles)
print(sean.yearsExp)

output

Sean
IOS Engineer
5

If you want a class but will add values to it later then use ?(optionals) after data type, observe below

class Developer {
    var name: String?
    var jobTitles: String?
    var yearsExp: Int?
    
    init() {}  //to initialize the nill values
    
    init(name: String, jobTitles: String, yearsExp: Int) {
        self.name = name
        self.jobTitles = jobTitles
        self.yearsExp = yearsExp
    }
}

let sean = Developer()

print(sean.name)
print(sean.jobTitles)
print(sean.yearsExp)

output

nil
nil
nil

The drawback of using ? optional and how to remove it

class Developer {
    var name: String?
    var jobTitles: String?
    var yearsExp: Int?
    
    init() {}
    init(name: String, jobTitles: String, yearsExp: Int) {
        self.name = name
        self.jobTitles = jobTitles
        self.yearsExp = yearsExp
    }
    
    func speakName() {
        print(name!) //using force unwrap(!) to remove optional in the output
			//before string because we used String? datatype(or else the output would've 
			//been: Optional("Sean"))
    }
}

let sean = Developer(name: "Sean", jobTitles: "Coder", yearsExp: 2)
sean.speakName()

output

Sean

Inheritance