Swift generics и CMutableVoidPointer

#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)
}