@@ -13,19 +13,15 @@ pub enum MYObject { }
13
13
14
14
impl MYObject {
15
15
fn number ( & self ) -> u32 {
16
- let obj = unsafe {
17
- & * ( self as * const _ as * const Object )
18
- } ;
19
16
unsafe {
17
+ let obj = & * ( self as * const _ as * const Object ) ;
20
18
* obj. get_ivar ( "_number" )
21
19
}
22
20
}
23
21
24
22
fn set_number ( & mut self , number : u32 ) {
25
- let obj = unsafe {
26
- & mut * ( self as * mut _ as * mut Object )
27
- } ;
28
23
unsafe {
24
+ let obj = & mut * ( self as * mut _ as * mut Object ) ;
29
25
obj. set_ivar ( "_number" , number) ;
30
26
}
31
27
}
@@ -43,17 +39,20 @@ impl INSObject for MYObject {
43
39
decl. add_ivar :: < u32 > ( "_number" ) ;
44
40
45
41
// Add ObjC methods for getting and setting the number
46
- extern fn my_object_set_number ( this : & mut MYObject , _cmd : Sel , number : u32 ) {
47
- this. set_number ( number) ;
42
+ extern fn my_object_set_number ( this : & mut Object , _cmd : Sel , number : u32 ) {
43
+ unsafe { this. set_ivar ( "_number" , number) ; }
48
44
}
49
- decl. add_method ( sel ! ( setNumber: ) ,
50
- my_object_set_number as extern fn ( & mut MYObject , Sel , u32 ) ) ;
51
45
52
- extern fn my_object_get_number ( this : & MYObject , _cmd : Sel ) -> u32 {
53
- this. number ( )
46
+ extern fn my_object_get_number ( this : & Object , _cmd : Sel ) -> u32 {
47
+ unsafe { * this. get_ivar ( "_number" ) }
48
+ }
49
+
50
+ unsafe {
51
+ decl. add_method ( sel ! ( setNumber: ) ,
52
+ my_object_set_number as extern fn ( & mut Object , Sel , u32 ) ) ;
53
+ decl. add_method ( sel ! ( number) ,
54
+ my_object_get_number as extern fn ( & Object , Sel ) -> u32 ) ;
54
55
}
55
- decl. add_method ( sel ! ( number) ,
56
- my_object_get_number as extern fn ( & MYObject , Sel ) -> u32 ) ;
57
56
58
57
decl. register ( ) ;
59
58
} ) ;
0 commit comments