我获得了dev_t
类型的值,我想访问它的主要版本和次要版本号,不幸的是,在C语言中,您会调用major(theValue)
或minor(theValue)
他们不是在Swift中定义(可能是因为它们只是宏?)。
我该怎么做?
谢谢
答案 0 :(得分:1)
是的,问题是var onClick = function(e) {
map.off('click', onClick);
var marker = L.marker(e.latlng,{draggable: true}).addTo(map);
var lat = e.latlng.lat;
var lon = e.latlng.lng;
alert("Lat, Lon : " + lat + ", " + lon);
};
map.on('click', onClick);
中major/minor
被定义为非平凡的宏:
<sys/types.h>
因此在Swift中不可用。
可能的解决方案是定义辅助函数 在桥接头文件中(宏 可用):
#define major(x) ((int32_t)(((u_int32_t)(x) >> 24) & 0xff))
#define minor(x) ((int32_t)((x) & 0xffffff))
然后可以从Swift中使用它们:
#include <sys/types.h>
static inline int32_t dev_major(dev_t x) { return major(x); }
static inline int32_t dev_minor(dev_t x) { return minor(x); }
在Linux上,您可以在Glibc中调用相应的库函数:
func foo(device: dev_t) {
let ma = dev_major(device)
let mi = dev_minor(device)
}
答案 1 :(得分:1)
dev_t
是带符号的32位整数。 major
返回最重要的8位,minor
返回最低有效24位。
let x: dev_t = 0x12345678
func major(_ x: dev_t) -> Int32 {
return (x >> 24) & 0xff
}
func minor(_ x: dev_t) -> Int32 {
return x & 0xffffff
}
print(String(major(x), radix: 16))
print(String(minor(x), radix: 16))
输出:
12
345678