rust_macios/foundation/ns_array/
iter.rs1use crate::{
2 foundation::{ns_mutable_array::INSMutableArray, NSMutableArray, NSNumber, NSString, UInt},
3 objective_c_runtime::traits::{FromId, PNSObject},
4};
5
6use super::{INSArray, NSArray};
7
8#[derive(Debug)]
10pub struct Iter<'a, T>
11where
12 T: PNSObject,
13{
14 pub(super) array: &'a NSArray<T>,
15 pub(super) index: UInt,
16}
17
18impl<'a, T> Iterator for Iter<'a, T>
19where
20 T: PNSObject + FromId,
21{
22 type Item = T;
23
24 fn next(&mut self) -> Option<Self::Item> {
25 if self.index >= self.array.p_count() {
26 None
27 } else {
28 let item = self.array.m_object_at_index(self.index);
29 self.index += 1;
30 Some(item)
31 }
32 }
33}
34
35impl<'a, T> FromIterator<&'a T> for NSArray<T>
36where
37 T: PNSObject + FromId + 'a,
38{
39 fn from_iter<I>(iter: I) -> Self
40 where
41 I: IntoIterator<Item = &'a T>,
42 {
43 let mut mut_arr = NSMutableArray::tm_array_with_capacity(0);
44 for item in iter {
45 mut_arr.im_add_object(item);
46 }
47
48 NSArray::from(mut_arr)
49 }
50}
51
52impl FromIterator<NSString> for NSArray<NSString> {
53 fn from_iter<I>(iter: I) -> Self
54 where
55 I: IntoIterator<Item = NSString>,
56 {
57 let mut mut_arr = NSMutableArray::tm_array_with_capacity(0);
58 for item in iter {
59 mut_arr.im_add_object(&item);
60 }
61
62 NSArray::from(mut_arr)
63 }
64}
65
66impl FromIterator<NSNumber> for NSArray<NSNumber> {
67 fn from_iter<I>(iter: I) -> Self
68 where
69 I: IntoIterator<Item = NSNumber>,
70 {
71 let mut mut_arr = NSMutableArray::tm_array_with_capacity(0);
72 for item in iter {
73 mut_arr.im_add_object(&item);
74 }
75
76 NSArray::from(mut_arr)
77 }
78}