Calculated property in Struct?

I have a struct that I'd like to include a calculated property in, but I'm not sure how to initialise/set up the property as it's based on another property which is also a struct:

struct Session {
    let weekNumber: Int
    let dayNumber: Int
    let sets: Int
    let totalTime: Double
    let phases: [Phase]
    
    struct Phase {
        let order: Int
        let time: Double
        let label: String
    }
}

I would like totalTime to be calculated as the sum of phases.time. Is this possible?

You can do something like that. That calculates only once.

struct Session {
    let weekNumber: Int
    let dayNumber: Int
    let sets: Int
    let totalTime: Double
    let phases: [Phase]
    
    init(weekNumber: Int,
         dayNumber: Int,
         sets: Int,
         totalTime: Double,
         phases: [Phase]) {
        self.weekNumber = weekNumber
        self.dayNumber = dayNumber
        self.sets = sets
        self.phases = phases
        self.totalTime = phases.reduce(0) { $0 + $1.time } // Sum every phase
    }
    
    struct Phase {
        let order: Int
        let time: Double
        let label: String
    }
}

Or you can do using computed property. That calculates every time it is called.

struct Session {
    let weekNumber: Int
    let dayNumber: Int
    let sets: Int
    var totalTime: Double {
        return phases.reduce(0) { $0 + $1.time } // Sum every phase
    }
    let phases: [Phase]
    
    struct Phase {
        let order: Int
        let time: Double
        let label: String
    }
}
1 Like
Terms of Service

Privacy Policy

Cookie Policy