Weekly Swift articles, podcasts and tips by John Sundell.

Computed properties vs methods

Published on 06 Aug 2019

When picking between a computed property versus a method in Swift, I choose a property when:

extension TodoItem {
    // Returning information about an object/value's state in
    // constant time = property.
    var isCompleted: Bool {
        return state == .completed
    }

    // Returning a new value after applying a mutation = method.
    func completed() -> TodoItem {
        var item = self
        item.state = .completed
        return item
    }

    // Returning information, but in a way that's slower than
    // constant time (O(N), where N is the number of attachments
    // in this case) = method.
    func attachmentTags() -> Set<Tag> {
        return attachments.reduce([]) { tags, attachment in
            tags.union(attachment.tags)
        }
    }
}