某些C API(例如glGetShaderInfoLog)在缓冲区中返回字符数组.我需要将它们转换为字符串才能使用它们.
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'
Run Code Online (Sandbox Code Playgroud)
在这个例子中,GLchar映射到Swift类型的CChar AKA Int8但是在我的生命中,我找不到将用它初始化的String或NSString方法.
这样做的诀窍:
var s = NSString(bytes: infoLog, length: Int(infoLogLength), encoding: NSASCIIStringEncoding)
Run Code Online (Sandbox Code Playgroud)