[swift-users] protocol definition question
torquato
torquato at gmx.de
Thu Dec 14 04:59:47 CST 2017
Hello everyone!
My first mail on the list. That means I can't reply directly to the mail
I found in the archive.
In addition to what Kevin already suggested here
https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20171211/006743.html
there is another more generic solution to circumvent the problem that
you have to specify a concrete type for the array element.
You could use a second associated type in the protocol definition.
This is how it could look like:
protocol RawBits {
associatedtype RawElement: FixedWidthInteger
associatedtype RawValue = RawElement
var rawValue: RawValue { get set }
}
extension RawBits where RawElement: UnsignedInteger, RawValue ==
Array<RawElement> {
func testArray() {
print("RawElement: \(RawElement.self) RawValue: \(RawValue.self)")
}
}
extension RawBits where RawElement: UnsignedInteger, RawValue ==
RawElement {
func testUnsigned() {
print("RawElement: \(RawElement.self) RawValue: \(RawValue.self)")
}
}
struct RBits<RawElement: FixedWidthInteger>: RawBits {
var rawValue: RawValue
}
struct RBitsX<RawElement: FixedWidthInteger>: RawBits {
var rawValue: [RawElement]
}
var rb = RBits(rawValue: 42 as UInt32)
rb.testUnsigned() // RawElement: UInt32 RawValue: UInt32
var rbx = RBitsX(rawValue: [1 as UInt8, 2, 3])
rbx.testArray() // RawElement: UInt8 RawValue: Array<UInt8>
More information about the swift-users
mailing list