Protocols can require readable or writable properties.

Require calculated data

property_requirements.swift
protocol HasArea {
    var area: Int { get }
}

struct Rectangle: HasArea {
    let width: Int
    let height: Int

    var area: Int {
        return width * height
    }
}

let width = 
let rectangle = Rectangle(width: width, height: 4)
let area = rectangle.area

print("width=\(width)")
print("area=\(area)")
protocol HasArea {
    var area: Int { get }
}

struct Rectangle: HasArea {
    let width: Int
    let height: Int

    var area: Int {
        return width * height
    }
}

let width = 
let rectangle = Rectangle(width: width, height: 4)
let area = rectangle.area

print("width=\(width)")
print("area=\(area)")
protocol HasArea {
    var area: Int { get }
}

struct Rectangle: HasArea {
    let width: Int
    let height: Int

    var area: Int {
        return width * height
    }
}

let width = 
let rectangle = Rectangle(width: width, height: 4)
let area = rectangle.area

print("width=\(width)")
print("area=\(area)")
property requirement A computed property can satisfy a protocol requirement just like a stored property can.