2017-09-01 80 views
0

我試圖幫助綁定的Gtk斯威夫特使用SwiftGtk來。然而,同時加入了類HeaderBar我得到的錯誤:「UnsafePointer <Int8>」沒有成員「的toString」

/home/luis/Dropbox/Documentos/Coding/Swift/SwiftGtk/.build/checkouts/SwiftGtk--2571330441700638662/Sources/HeaderBar.swift:15:63: error: value of type 'UnsafePointer<gchar>' (aka 'UnsafePointer<Int8>') has no member 'toString' 
     get { return gtk_header_bar_get_title(castedPointer())?.toString() } 
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ ~~~~~~~~ 
/home/luis/Dropbox/Documentos/Coding/Swift/SwiftGtk/.build/checkouts/SwiftGtk--2571330441700638662/Sources/HeaderBar.swift:20:66: error: value of type 'UnsafePointer<gchar>' (aka 'UnsafePointer<Int8>') has no member 'toString' 
     get { return gtk_header_bar_get_subtitle(castedPointer())?.toString() } 
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ ~~~~~~~~ 
/home/luis/Dropbox/Documentos/Coding/Swift/SwiftGtk/.build/checkouts/SwiftGtk--2571330441700638662/Sources/HeaderBar.swift:41:75: error: value of type 'UnsafePointer<gchar>' (aka 'UnsafePointer<Int8>') has no member 'toString' 
     get { return gtk_header_bar_get_decoration_layout(castedPointer())?.toString() } 

什麼似乎是發生的是Gtk.HeaderBar get_title()方法返回一個類型UnsafePointer,這是不被鑄造的gchar,這是(我認爲)到字符串正確的代碼:

public var title: String? { 
    get { return gtk_header_bar_get_title(castedPointer())?.toString() } 
    set { gtk_header_bar_set_title(castedPointer(), newValue) } 
} 

public var subtitle: String? { 
    get { return gtk_header_bar_get_subtitle(castedPointer())?.toString() } 
    set { gtk_header_bar_set_subtitle(castedPointer(), newValue) } 
} 
  • 我應該遵循哪種方法將它轉換成字符串?

回答

1

UnsafePointer<Int8>獲取String有多種方法。請參閱String文檔在https://developer.apple.com/documentation/swift/string。這裏的複雜性是相同的字符字符串具有取決於所使用的編碼不同的字節序列表示。一種方法是使用init(cString:encoding:)。例如,如果您知道UnsafePointer<Int8>變量buf指向的緩衝區編碼爲ASCII,則可能會得到如下所示的字符串:

let s = String.init(cString: buf, encoding: String.Encoding.ascii)