2016-07-14 20 views
6

Próbuję iterować wzdłuż słownika, aby przycinać niepotwierdzone wpisy. Swift 3 przekład następujący kod Objective-C nie działa:Iterowanie wzdłuż słownika w Swift 3

[[self sharingDictionary] enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { 
        SharingElement* element=[[self sharingDictionary] objectForKey:key]; 
        if (!element.confirmed){ 
         dispatch_async(dispatch_get_main_queue(), ^{ 
          [element deleteMe]; 
         }); 
         [[self sharingDictionary] performSelector:@selector(removeObjectForKey:) withObject:key 
                 afterDelay:.2]; 
        } else{ 
         element.confirmed=NO; 
       }]; 

A więc próbowałem przy użyciu następującej Compact wyliczone() metoda w ten sposób:

for (key, element) in self.sharingDictionary.enumerated(){ 
      if (!element.confirmed){ 
        element.deleteMe() 
       self.perform(#selector(self.removeSharingInArray(key:)), with:key, afterDelay:0.2); 
      } else{ 
       element.confirmed=false 
      } 
     } 

Jednak kompilator donosi następujący błąd podczas przetwarzania użycie zmiennej „elementu”:

wartość typu krotki „(klucz: Int, wartość: SharingElement)” został żaden członek „potwierdzone”

Podobnie jak "element" wziął pełno krotki ojciec niż część jego kompetencji. Czy problem dotyczy używania wyliczonych() lub przetwarzania słownika i jak mogę to naprawić?

Odpowiedz

-3

skończyło się na wdrażaniu coś jak:

DispatchQueue.global(attributes: .qosBackground).async{ 
      for (key, element) in self.sharingDictionary{ 
       if !element.confirmed{ 
        DispatchQueue.main.async({ 
         element.deleteMe() 
         self.removeSharingInArray(key:key) 
        }) 
       } else{ 
        element.confirmed=false 
       } 
      } 
     } 

Więc mam nadzieję usunąć obiekt bez zmiany słownika, gdy jest on przeglądany, co wykorzystywane do awarii aplikacji, nawet jeśli nie wiem, czy nadal walizka.

22

Użyj element.value.confirmed. element to krotka zawierająca zarówno key, jak i value.

Ale pewnie po prostu chcesz usunąć enumerated():

for (key, element) in self.sharingDictionary { 
    ... 
} 

enumerated() trwa iteracji i dodaje indeksy zaczynające się od zera. To nie jest bardzo powszechne w przypadku słowników.

0

To powinno załatwić sprawę,

 localDictionary.enumerateKeysAndObjects ({ (key, value, stop) -> Void in 

    })