함수 인수 유형이 프로토콜을 채택하는 유형에 따라 달라지는 신속한 프로토콜을 어떻게 선언 할 수 있습니까?신속한 프로토콜 정의에서 템플릿 유형 사용
뭔가 배경
protocol EndianConvertible<T> {
init(litteEndian: T);
func litteEndian() -> T;
}
같은 : 나는 신속한에서 리틀 엔디안 이진 스트림에 대한 스트림 디코더를 작성하는 것을 시도하고있다. 그
부분은 정수 프로토콜이 초기화를 지정하지 않는 한 컴파일에 실패하는 일반적인 기능
class ReadStream {
var offset : Int = 0;
var data : Data;
func readIntLE<T : Integer>() -> T {
var d : T = 0
let intBits = data.withUnsafeBytes({(bytePointer: UnsafePointer<UInt8>) -> T in
bytePointer.advanced(by: offset).withMemoryRebound(to: T.self, capacity: MemoryLayout<T>.size) { pointer in
offset += MemoryLayout<T>.size
return pointer.pointee
}
})
d = T(littleEndian: intBits)
}
}
입니다 (litteEndian는 : T)이 가능하고 확실한 방법은를 가진 것 같았다 수정 프로토콜을 추가합니다.
프로토콜이 허용하지 않는 일반 매개 변수, 위의 첫 번째 조각에 대한 그래서, 당신은 오히려 사용할 수를 (프로토콜 Foo {관련 타입 T; 초기화 (litteEndian : T);/* ... * /}'). – dfri