Отправить пользовательский объект со ссылкой и обновить значения в обоих объектах: iOS - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно обновить значения в ссылочном классе до моей пользовательской ячейки.

Я хочу в архив:

  1. Получить данные из API // Завершено
  2. создание пользовательского объекта (модели) из API // Завершено
  3. Отправить ссылку на объект в пользовательскую ячейку из массива
  4. изменить значение в пользовательской ячейке
  5. Обновить значение в массиве контроллера вида

Я прочитал эту ссылку, но не могу обновить значения

https://medium.com/@abhimuralidharan/difference-between-value-type-and-a-reference-type-in-ios-swift-18cb5145ad7a

https://developer.apple.com/swift/blog/?id=10

Ниже мой класс

class Post {
    // https://www.raywenderlich.com/9481-reference-vs-value-types-in-swift
    var objPost:ObjPost

    init(_ objPost:ObjPost) {
        self.objPost = objPost
    }
}

struct ObjPost:Codable {
    var id:Int
    var contentAvailable : Bool
    var userId : Int
    var userName : String
    var userProfileImage: String
    var subTitle : String
    var postedSince : String
    var isPin : Bool
    var location : String
    var lat : String
    var long: String
    var isLiked: Bool
    var isDisliked : Bool
    var likes : Int
    var dislikes: Int
    var shares: Int
    var comments:Int
    var description: String
    var albumId: Int
    var privacy: Int
    var isEditable: Bool
    var media:[ObjMedia]
}

struct ObjMedia:Codable {
    var id: Int
    var type: Int // 1 = Image, 2=Video
    var url: String
    var description: String?
    var thumb: String
    var isLiked: Bool
    var isDisliked:Bool
    var likes:Int
    var dislikes: Int
    var shares: Int
    var comments: Int
    var isEditable:Bool
    var isPin: Bool
    var isCoverMedia: Bool
}

Передать ссылку объекта ObjPost tableView: UITableView, cellForRowAt indexPath: IndexPath

В приведенном ниже коде получить ссылочный объект из массива с -1 значением indexPath.row-1 , поскольку 1-я строка является фиксированным пользовательским интерфейсом в моем проекте.

cell.objPostDetails = Post(arrPosts[indexPath.row-1].objPost)

Пользовательский код ячейки и

var objPostDetails:Post! // Create object variable.

Обновить код значений в пользовательской ячейке

self.objPostDetails.objPost.isLiked  = !self.actionSelected // Here is action selected is bool variable
self.objPostDetails.objPost.isDisliked  = self.actionSelected // Here is action selected is bool variable

Моя проблема - обновить значение в ячейке, но не обновить значения в массиве Когда я прокручиваю вверх и вниз, тогда видны старые значения.

1 Ответ

1 голос
/ 18 июня 2019

Также возьмите ObjPost и ObjMedia как class вместо struct. Тогда все заработало как положено.

class ObjPost:Codable {
    var id:Int
    var contentAvailable : Bool
    var userId : Int
    var isDisliked : Bool
 ...
}

class ObjMedia:Codable {
    var id: Int
    var type: Int
    var url: String
    var description: String?
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...