An extremely simple solution to conform tuples to protocols.
Did you ever want to conform Swift tuples to protocols?
Now you can!
extension Tuple where repeat each T: MyProtocol {
func myProtocolRequirement() {
// ...
}
}
extension Int: MyProtocol { /* ... */ }
extension String: MyProtocol { /* ... */ }
extension Bool: MyProtocol { /* ... */ }
let test = Tuple(1, "String", false)
test.myProtocolRequirement() // works! :)
test == Tuple(flatten: (1, "String", false)) // true
try JSONEncodable().encode(test) // [1, "String", false]
Tuple(1, 2) < Tuple(0, 560) // false
Set([Tuple(0, "Hello"), Tuple(1, "World!")])
var it = Tuple(["Hello", "World"], [0, 1, 2]).makeIterator()
it.next() == Tuple<String?, Int?>("Hello", 0)
it.next() == Tuple<String?, Int?>("World", 1)
it.next() == Tuple<String?, Int?>(nil, 2)
it.next() == nilTuple conditionally conforms to a number of protocols for your convenience:
EquatableHashableBitwiseCopyableSendableErrorComparable, with lexicographic orderingCodable, implemented as an unkeyed containerSequence, acts as a zipIteratorProtocol, acts as a zipOptionalProtocol, transpose into optional
Tuple also has additional utilities:
countisAnyNoneandTuplewhen each elements isOptionalProtocol.