update/change array value (swift)
Asked Answered
S

1

10

Data Model

class dataImage {
    var userId: String
    var value: Double
    var photo: UIImage?
    var croppedPhoto: UIImage?

init(userId:String, value: Double, photo: UIImage?, croppedPhoto: UIImage?){
    self.userId = userId
    self.value = value
    self.photo = photo
    self.photo = croppedPhoto
   }

}

View Controller

var photos = [DKAsset]() //image source
var datas = [dataImage]()

var counter = 0
    for asset in photos{
        asset.fetchOriginalImageWithCompleteBlock({ image, info in // move image from photos to datas

            let images = image
            let data1 = dataImage(userId: "img\(counter+1)", value: 1.0, photo: images, croppedPhoto: images)
            self.datas += [data1]
            counter++

        })
    }

from that code, let's say i have 5 datas:

 - dataImage(userId: "img1", value: 1.0, photo: images, croppedPhoto:
   images)
 - dataImage(userId: "img2", value: 1.0, photo: images, croppedPhoto:
   images)
 - dataImage(userId: "img3", value: 1.0, photo: images, **croppedPhoto:
   images**)
 - dataImage(userId: "img4", value: 1.0, photo: images, croppedPhoto:
   images)
 - dataImage(userId: "img5", value: 1.0, photo: images, croppedPhoto:
   images)

How to change/update img3's croppedImage value?

Sub answered 20/1, 2016 at 11:30 Comment(3)
Mate , please be clear on your question. Can you explain "asset in photos"Zelikow
wait i'll update it, thank youSub
Does this answer your question? Find an item and change value in custom object array - SwiftCathedral
S
14
self.datas[2] = dataImage(userId: "img6", value: 1.0, photo: images, croppedPhoto:  images)

This will replace the 3rd object in the array with a new one.

or

self.datas[2].value = 2.0

This will change the value of the dataImage object with userId "img3".

Does this answer your question?

If you need to search for a specific value in userId, then you are far better of with a dictionary (associated array) rather than an (indexed) array.

var datas = [String, dataImage]()
...
self.datas["img\(counter+1)"] = ...

And you access it the same way.

self.datas["img3"].value = 2.0

And please rename the class imageData into ImageData. Class names start with capitals.

Selfconscious answered 20/1, 2016 at 11:51 Comment(5)
what if i didn't know the array number? could i change it based on userId? (img3)Sub
Yes. You can iterate though the array and stop where the userId is the same as the one that your are looking for or you use a dictionary instead of the array and access the object directly. See my answer. It is all in there.Selfconscious
hi @HermannKlecker thank you for ur answer, i've another question that related to this page. feel free to see it #34915870Sub
Iteration through long list using for is very inefficient. I would use hasmapDamage
What do you mean by "how to save it"? You would save it as you save any other array. And how to save it depends very much on your persistence storage.Selfconscious

© 2022 - 2024 — McMap. All rights reserved.