I'm trying to access the url of an object stored in an array, but I'm getting errors no matters what methods I'm using.
let userPhotos = currentUser?.photos for var i = 0; i < userPhotos!.count ; ++i { let url = userPhotos[i].url }
Here I get
Could not find member 'url'
and with a foreach:
for photo in userPhotos { Utils.getImageAsync(photo.url , completion: { (img: UIImage?) -> () in }) }
I get:
'[ModelAttachment]?' does not have a member named 'Generator'
My array is var photos: Array<ModelAttachment>?
and my ModelAttachment looks like this:
class ModelAttachment :Model { var id: String? var url: String? var thumb: String? }
Any pointers to what I'm doing wrong would be great :)
Swift provides for-in loop for this kind of job. You use the for-in loop to iterate over a sequence, such as items in an array. This example uses a for-in loop to iterate over the subviews and set their translatesAutoresizingMaskIntoConstraints to false .
Unwrap and downcast the objects to the right type, safely, with if let
, before doing the iteration with a simple for in
loop.
if let currentUser = currentUser, let photos = currentUser.photos as? [ModelAttachment] { for object in photos { let url = object.url } }
There's also guard let else
instead of if let
if you prefer having the result available in scope:
guard let currentUser = currentUser, let photos = currentUser.photos as? [ModelAttachment] else { // break or return } // now 'photos' is available outside the guard for object in photos { let url = object.url }
Your userPhotos
array is option-typed, you should retrieve the actual underlying object with !
(if you want an error in case the object isn't there) or ?
(if you want to receive nil
in url):
let userPhotos = currentUser?.photos for var i = 0; i < userPhotos!.count ; ++i { let url = userPhotos![i].url }
But to preserve safe nil handling, you better use functional approach, for instance, with map
, like this:
let urls = userPhotos?.map{ $0.url }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With