2014-06-05 4 views
5

Alcune API C, ad es. glGetShaderInfoLog, restituisce matrici di caratteri nei buffer. Devo convertirli in stringhe per usarli.Converti array Swift CChar in una stringa

var value: GLint = 0 
glGetShaderiv(shader, GLenum(GL_INFO_LOG_LENGTH), &value) 
var infoLog: GLchar[] = GLchar[](count: Int(value), repeatedValue: 0) 
var infoLogLength: GLsizei = 0 
glGetShaderInfoLog(shader, value, &infoLogLength, &infoLog) 
var s: String = NSString.stringWithUTF8String(infoLog) // Compile Error: Cannot convert the expression's type 'NSString!' to type 'CString' 

In questo esempio GLchar mappe per il tipo di Swift CChar AKA int8, ma per la vita di me non riesco a trovare una stringa o un metodo NSString che inizializzare con esso.

+0

cosa succede se si typehint a NSString invece? – zneak

+0

Stesso errore di compilazione. – darrinm

risposta

9

Questo fa il trucco:

var s = NSString(bytes: infoLog, length: Int(infoLogLength), encoding: NSASCIIStringEncoding) 
0

In alternativa qui è un'altra opzione che compila:

var infoLog = UnsafePointer<CChar>.alloc(Int(value)) 
glGetShaderInfoLog(shader, value, nil, infoLog) 
var infoLogString = String.fromCString(infoLog) 
infoLog.dealloc(Int(value))