rust_macios/foundation/ns_array/
iter.rs

1use 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/// An iterator for `Array`
9#[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}