#generics #swift #nsdata
#дженерики #swift #nsdata
Вопрос:
На данный момент в моем общем классе у меня есть следующая функция
func writeHeader(buffer: CMutableVoidPointer) {
var headerData = NSData(bytesNoCopy:buffer, length:sizeof(H))
self.fileHandle.writeData(headerData)
}
Но, как вы видите, это не очень безопасно для типов. Я пробовал это, но он не компилируется
func writeHeader(buffer: CMutablePointer<H>) {
var headerData = NSData(bytesNoCopy:buffer, length:sizeof(H))
self.fileHandle.writeData(headerData)
}
Есть идеи?
Обновить
Это часть общего класса, как упоминалось в первом предложении, извините, в следующий раз я более конкретен.
class DataStore<H> {
.....
}
Комментарии:
1. Является
H
ли это фактическим типом?2. Он не компилируется, потому что вы не можете предоставить компилятору полутипы. Вам нужно указать, что H следует вывести, заключив его в некоторые угловые скобки:
func writeHeader<H>(buffer: CMutablePointer<H>)
3. Не могли бы вы предоставить более подробную информацию? Это
buffer
свойствоDataStore
или что-то еще? КакwriteHeader
это будет называться?
Ответ №1:
Это может быть то, что вы ищете:
func writeHeader<H>(buffer: CConstPointer<H>) {
let headerData = buffer.withUnsafePointer {
NSData(bytesNoCopy: $0, length: sizeof(H), freeWhenDone: false)
}
self.fileHandle.writeData(headerData)
}