Иногда классы обрабатывают как структуры в Swift? - PullRequest
0 голосов
/ 27 августа 2018

например: - В классе DishPostedVC у меня есть массив модели: - var finalDatesOfDish: [DishActivationDateTimeModel]?

Если я передаю эту переменную (finalDatesOfDish) в класс DishActivationVC и выполняю некоторую операцию удаления в классе DishActivationVC, и если я снова возвращаюсь в класс DishPostedVC, то я получаю данные после удаления, а не фактические данные, но я просто возвращаясь без передачи каких-либо данных.

Не знаю, почему, но эта ситуация произошла еще раз раньше с массивом модели, это так странно, как это возможно?

ты можешь сказать мне, что мне делать?

class DishActivationDateTimeModel {

var dayDate: Date? = nil
var dayDateStr: String = ""
var servingsLeft: String = ""
var firstSlotPostedDishId: String = ""
var secondSlotPostedDishId: String = ""

var startTimeDateForFirstSlot: Date? = nil
var startTimeStringForFirstSlot: String = ""
var endTimeDateForFirstSlot: Date? = nil
var endTimeStringForFirstSlot: String = ""

var startTimeDateForSecondSlot: Date? = nil
var startTimeStringForSecondSlot: String = ""
var endTimeDateForSecondSlot: Date? = nil
var endTimeStringForSecondSlot: String = ""
}

Это моя модель

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

В структурах и классах Swift вы можете получить как объекты, так и ссылочные конструкции для своих объектов. Структуры предпочтительнее для объектов, предназначенных для хранения данных, таких как массив. Структуры также помогают устранить проблемы с памятью при передаче объектов в многопоточной среде. Классы, в отличие от структур, поддерживают наследование и используются больше для содержания логики, такой как UIViewController. Большинство стандартных объектов данных библиотеки в Swift, таких как String, Array, Dictionary, Int, Float, Boolean, являются структурами, поэтому являются объектами-значениями. Изменчивость var по сравнению с let - вот почему в Swift нет изменяемых и неизменяемых версий коллекций, таких как NSArray Objective C и NSMutableArray.

0 голосов
/ 27 августа 2018
  class DishActivationDateTimeModel {

    var dayDate: Date? = nil
    var dayDateStr: String = ""
    var servingsLeft: String = ""
    var firstSlotPostedDishId: String = ""
    var secondSlotPostedDishId: String = ""

    var startTimeDateForFirstSlot: Date? = nil
    var startTimeStringForFirstSlot: String = ""
    var endTimeDateForFirstSlot: Date? = nil
    var endTimeStringForFirstSlot: String = ""

    var startTimeDateForSecondSlot: Date? = nil
    var startTimeStringForSecondSlot: String = ""
    var endTimeDateForSecondSlot: Date? = nil
    var endTimeStringForSecondSlot: String = ""

    init(_ object : DishActivationDateTimeModel) {
        self.dayDate = object.dayDate
        self.dayDateStr = object.dayDateStr
//        ....
//        ....
        self.endTimeStringForSecondSlot = object.endTimeStringForSecondSlot
    }
}
extension Array where Element : DishActivationDateTimeModel {

    func copyModelArray() -> [DishActivationDateTimeModel] {
        var array : [DishActivationDateTimeModel] = []
        for object in self {
            array.append(DishActivationDateTimeModel(object))
        }
        return array
    }
}

Если вы не хотите вносить изменения в свои основные данные, скопируйте массив моделей с использованием метода copyModelArray. И использовать свой операционный модельный массив. Таким образом, это не влияет на массив данных вашей основной модели.

...