@@ -215,6 +215,37 @@ impl<T: Message> DefaultId for NSArray<T, Shared> {
215215 }
216216}
217217
218+ impl < T : Message , O : Ownership > From < Id < NSArray < T , O > , Owned > > for Vec < Id < T , O > > {
219+ fn from ( array : Id < NSArray < T , O > , Owned > ) -> Self {
220+ let vec: Vec < & T > = ( & * array) . into ( ) ;
221+ vec. into_iter ( )
222+ . map ( |obj| unsafe { Id :: retain ( obj. into ( ) ) } )
223+ . collect ( )
224+ }
225+ }
226+
227+ impl < T : Message , O : Ownership > From < Vec < Id < T , O > > > for Id < NSArray < T , O > , Owned > {
228+ fn from ( vec : Vec < Id < T , O > > ) -> Self {
229+ unsafe { from_refs ( vec. as_slice_ref ( ) ) }
230+ }
231+ }
232+
233+ impl < ' a , T : Message , O : Ownership > From < & ' a NSArray < T , O > > for Vec < & ' a T > {
234+ fn from ( array : & ' a NSArray < T , O > ) -> Self {
235+ array. objects_in_range ( 0 ..array. count ( ) )
236+ }
237+ }
238+
239+ impl < T : Message > From < & ' _ NSArray < T , Shared > > for Vec < Id < T , Shared > > {
240+ fn from ( array : & NSArray < T , Shared > ) -> Self {
241+ array
242+ . objects_in_range ( 0 ..array. count ( ) )
243+ . into_iter ( )
244+ . map ( |obj| unsafe { Id :: retain ( obj. into ( ) ) } )
245+ . collect ( )
246+ }
247+ }
248+
218249impl < T : Message , O : Ownership > NSMutableArray < T , O > {
219250 unsafe_def_fn ! ( pub fn new -> Owned ) ;
220251
@@ -378,6 +409,12 @@ impl<T: Message, O: Ownership> DefaultId for NSMutableArray<T, O> {
378409 }
379410}
380411
412+ impl < T : Message , O : Ownership > From < Vec < Id < T , O > > > for Id < NSMutableArray < T , O > , Owned > {
413+ fn from ( vec : Vec < Id < T , O > > ) -> Self {
414+ unsafe { from_refs ( vec. as_slice_ref ( ) ) }
415+ }
416+ }
417+
381418#[ cfg( test) ]
382419mod tests {
383420 use alloc:: format;
@@ -395,7 +432,7 @@ mod tests {
395432 for _ in 0 ..len {
396433 vec. push ( NSObject :: new ( ) ) ;
397434 }
398- NSArray :: from_vec ( vec)
435+ vec. into ( )
399436 }
400437
401438 fn sample_number_array ( len : u8 ) -> Id < NSArray < NSValue < u8 > , Shared > , Shared > {
@@ -517,7 +554,7 @@ mod tests {
517554 fn test_into_vec ( ) {
518555 let array = sample_array ( 4 ) ;
519556
520- let vec = NSArray :: into_vec ( array) ;
557+ let vec = Vec :: from ( array) ;
521558 assert_eq ! ( vec. len( ) , 4 ) ;
522559 }
523560
@@ -566,7 +603,7 @@ mod tests {
566603 #[ test]
567604 fn test_sort ( ) {
568605 let strings = vec ! [ NSString :: from_str( "hello" ) , NSString :: from_str( "hi" ) ] ;
569- let mut strings = NSMutableArray :: from_vec ( strings) ;
606+ let mut strings: Id < NSMutableArray < _ , _ > , Owned > = strings. into ( ) ;
570607
571608 autoreleasepool ( |pool| {
572609 strings. sort_by ( |s1, s2| s1. as_str ( pool) . len ( ) . cmp ( & s2. as_str ( pool) . len ( ) ) ) ;
0 commit comments