Swift 6.0 Protocol Extensions with Generic Constraints

In Swift 6.0, protocol extensions get enhanced support for generic constraints

1
2
3
4
5
6
7
8
9
10
11
12
13
14
protocol Serializable {
    func serialize() -> String
}

extension Serializable where Self: Encodable {
    func serialize() -> String {
        let encoder = JSONEncoder()
        guard let data = try? encoder.encode(self),
              let json = String(data: data, encoding: .utf8) else {
            return "{}"
        }
        return json
    }
}

Tags:

Updated: