I didn't think this would work, but I tried it anyway. And it works. I am glad it does, but am curious as to "why"? Is this documented anywhere?
import Foundation
protocol Somethingable {
init?(something: Data)
}
extension String: Somethingable {
init?(something: Data) {
if let myself = String(data: something, encoding: .ascii) {
self = myself
}
else {
return nil
}
}
}
extension FixedWidthInteger {
init(something: Data) {
self = something.withUnsafeBytes { $0.pointee }
}
}
extension UInt32 : Somethingable {}
let data = Data([0x31, 0x32, 0x33, 0x34])
let ui32 = UInt32(something: data)
print(ui32)
if let str = String(something: data) {
print(str)
}
else {
print("not convertable to string")
}