1141 分钟

Swift 调用 GLib

2022-07-26

g_signal_connect#

Swift无法调用C宏, 需要使用g_signal_connect_data函数

let slot: @convention(c) (UnsafeMutableRawPointer?) -> Void = { data in
    ...
}
g_signal_connect_data(ptr, "signal", unsafeBitCast(slot, to: GCallback?.self), data, nil, G_CONNECT_AFTER)

slot必须标记为@convention(c), 否则unsafeBitCast将产生fatalError

g_object_get_property#

func gproperty<T, R>(of ptr: UnsafeMutablePointer<T>, name: String, transform: (UnsafeMutablePointer<GValue>) -> R) -> R {
    ptr.withMemoryRebound(to: GObject.self, capacity: 1) {
        var value = GValue()
        g_object_get_property($0, name, &value)
        return transform(&value)
    }
}

再使用g_value_get族函数从GValue中获取值

let property = gproperty(of: ptr, name: "property") { g_value_get_variant($0) }

待续..#

Swift 调用 GLib

作者:shsuco

发布于:2022-07-26

许可协议:CC BY-NC-SA 4.0

On this page