pkg/objc: more methods

This commit is contained in:
Mitchell Hashimoto
2022-10-28 09:36:56 -07:00
parent b4a83d98c4
commit 71042b6f1b

View File

@ -7,6 +7,22 @@ pub const Object = struct {
value: c.id, value: c.id,
pub usingnamespace MsgSend(Object); pub usingnamespace MsgSend(Object);
pub fn fromId(id: anytype) Object {
return .{ .value = @ptrCast(c.id, @alignCast(@alignOf(c.id), id)) };
}
/// Returns the class of an object.
pub fn getClass(self: Object) ?objc.Class {
return objc.Class{
.value = c.object_getClass(self.value) orelse return null,
};
}
/// Returns the class name of a given object.
pub fn getClassName(self: Object) [:0]const u8 {
return std.mem.sliceTo(c.object_getClassName(self.value), 0);
}
}; };
test { test {
@ -16,5 +32,6 @@ test {
// Should work with our wrappers // Should work with our wrappers
const obj = NSObject.msgSend(objc.Object, objc.Sel.registerName("alloc"), .{}); const obj = NSObject.msgSend(objc.Object, objc.Sel.registerName("alloc"), .{});
try testing.expect(obj.value != null); try testing.expect(obj.value != null);
try testing.expectEqualStrings("NSObject", obj.getClassName());
obj.msgSend(void, objc.sel("dealloc"), .{}); obj.msgSend(void, objc.sel("dealloc"), .{});
} }