swift - '不安全指针<Int8 >' has no member ' toString'

标签 swift linux gtk

我正在尝试使用 SwiftGtk 帮助将 Gtk 绑定(bind)到 Swift .但是,在为 HeaderBar 添加类时出现错误:

/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() 方法返回 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) }
}
  • 我应该遵循哪种方法将其转换为字符串?

最佳答案

有多种方法可以获得 String来自 UnsafePointer<Int8> .请参阅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)

关于swift - '不安全指针<Int8 >' has no member ' toString',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45993075/

相关文章:

swift - 是否可以通过扩展将关联值添加到现有的 Swift 枚举中?

linux - 通过 SSH 连接到 ec2 实例

c - 我应该使用 GTK 线程/关于 GTK 线程的好教程吗?

Python Gtk TextView 在末尾插入文本

java - 如何在 java 中创建 gnome gtk 通知?

ios - 使用 HealthKit 检索 SleepAnalysis 后,我仍然收到此授权未确定错误

ios - 每天固定时间运行一个任务

Linux open() 文件描述符

linux - gnuplot 条件代码解释

ios - 导航栏背景图像未扩展到搜索栏