'UnsafePointer<Int8>'没有会员'toString'
'UnsafePointer<Int8>' has no member 'toString'
我正在尝试使用 SwiftGtk 帮助将 Gtk 绑定到 Swift。但是,在为 HeaderBar 添加 class 时出现错误:
/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() 方法 returns gchar,它(我认为)是 UnsafePointer 类型,它没有被正确地转换成字符串在代码中:
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) }
}
- 我应该遵循哪种方法将其转换为字符串?
有多种方法可以从 UnsafePointer<Int8>
获取 String
。请参阅 https://developer.apple.com/documentation/swift/string 上的 String
文档。这里的复杂性在于,同一串字符根据所使用的编码具有不同的字节序列表示。一种方法是使用 init(cString:encoding:)
。例如,如果您知道 UnsafePointer<Int8>
变量 buf
指向的缓冲区被编码为 ASCII,您可以得到这样的字符串:
let s = String.init(cString: buf, encoding: String.Encoding.ascii)
我正在尝试使用 SwiftGtk 帮助将 Gtk 绑定到 Swift。但是,在为 HeaderBar 添加 class 时出现错误:
/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() 方法 returns gchar,它(我认为)是 UnsafePointer 类型,它没有被正确地转换成字符串在代码中:
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) }
}
- 我应该遵循哪种方法将其转换为字符串?
有多种方法可以从 UnsafePointer<Int8>
获取 String
。请参阅 https://developer.apple.com/documentation/swift/string 上的 String
文档。这里的复杂性在于,同一串字符根据所使用的编码具有不同的字节序列表示。一种方法是使用 init(cString:encoding:)
。例如,如果您知道 UnsafePointer<Int8>
变量 buf
指向的缓冲区被编码为 ASCII,您可以得到这样的字符串:
let s = String.init(cString: buf, encoding: String.Encoding.ascii)