/ / Jak skopiować wartości z obiektu dziedziny, aby przejść do innego wątku - ios, swift, wielowątkowość, dziedzina

Jak skopiować wartości z obiektu Realm, aby przejść do innego wątku - ios, swift, multithreading, realm

Mam obiekt Realm (nazwijmy go File) z wywołaną właściwością String url. Stworzyłem Alamofire DownloadRequest.DownloadFileDestination blok zawierający odniesienie do url więc mogę pobrać plik. Ponieważ jednak blok ten jest wykonywany na wątku w tle, Realm zgłasza wyjątek. Nie muszę faktycznie uzyskiwać dostępu do całej dziedziny, ani nawet całego obiektu File - tylko właściwości url - więc nie ma powodu, aby próbować otworzyć obiekt File z dziedziny w wątku w tle.

Jaki jest właściwy sposób kopiowania tego ciągu (lub właściwości innych typów) z obiektu Realm, aby przejść do innego wątku?

Moje obecne rozwiązanie wydaje się bardzo nieeleganckie - choć działa.

let url = "(object.url)"

To pytanie nie jest związane z konkretnym blokiem kodu - jest to raczej pytanie koncepcyjne.

Odpowiedzi:

0 dla odpowiedzi № 1

To normalne, jeśli czytasz Dokumenty dziedziny dla wątków, powiedziało you cannot have multiple threads sharing the same instances of Realm objects, to znaczy, że przynosisz File obiekt w głównym wątku, którego nie można używać w innym wątku, w twoim przypadku jest wątek tła Alamofire

To co zrobiłeś jest poprawne, przypisując wartość url do innej zmiennej, w przeciwnym razie po prostu zadzwoń fetchFile().url gdzie fetchFiles() zwróć obiekt pliku z Realm (ponownie pobierz obiekt pliku - ale będzie to miało gorszą wydajność, użyteczną tylko w innym przypadku, gdy obiekt dziedziny zmienił się znacznie)


0 dla odpowiedzi nr 2

Proste przypisywanie let url = object.url skopiuje wartość i jest bezpieczny dla wątków.