#ios #swift #xcode #realm
#iOS #swift #xcode #realm
Вопрос:
У меня есть приложение, которое работает просто отлично. Приложение представляет собой список автомобилей. Пользователь может добавлять, удалять и редактировать автомобили. Я пытался интегрировать RealmSwift
для хранения данных, но застрял. До сих пор данные для работы приложения хранятся в статической переменной в Cars
классе:
struct CarData {
var name: String
var year: String
}
class Cars {
static var list = [
CarData(name: "Toyota Corolla", year: "2007"),
CarData(name: "BMW 3", year: "2011")
]
static var index = -1
static var newCar = false
}
Мне нужна область в 2 контроллерах просмотра:
ListViewController
— для заполненияtableView
. Что-то вроде:
Cars.list = realmListOfCars
и остальная часть кода останется прежней.
2) ConfirmViewController
— для изменения сохраненных данных.
if toProceed {
if Cars.newCar {
Cars.list.append(carToEdit!) //add new car
} else {
Cars.list[Cars.index] = carToEdit! //edit car
}
} else {
if Cars.newCar == false {
Cars.list.remove(at: Cars.index) //delete car
}
}
//the idea is to add something like:
realmListOfCars = Cars.list
Итак, идея состоит в том, чтобы просто сделать Cars.list
равным realmListOfCars
после загрузки и сделать realmListOfCars
равным Cars.List
после того, как произойдет изменение.
Звучит просто, но я полностью застрял и запутался в создании и доступе realmListOfCars
.
Прошу вашей помощи!
P.S. Установлен RealmSwift
Комментарии:
1. Взгляните на это замечательное руководство, а затем вы можете начать с чего-нибудь. realm.io/docs/tutorials/realmtasks , appcoda.com/realm-database-swift
2. Я опубликовал ответ, который должен помочь, но я не уверен, как настроены ваши модели. У вас есть объект Cars, который, очевидно, содержит cars, но для чего это
index
свойство иnewCar
означает ли, что этот объект Cars содержит только not new cars (если он false)? Возможно, вы захотите переосмыслить эту структуру, если это так — если newCar имеет значение true для списка, это только новые автомобили или false, если нет, у вас будет только два объекта; один с новыми автомобилями, а другой без. Может быть лучший способ их сгруппировать
Ответ №1:
Если вы хотите хранить данные в Realm, вам необходимо сделать ваши объекты объектами Realm. Во-первых, класс Cars необходимо будет изменить
class Cars: Object {
и затем необходимо обновить каждое свойство, которым вы хотите управлять
@objc dynamic var newCar = false
например. Вы также хотели бы использовать объект списка Realm в качестве свойства данных Car для хранения cars (CarData должен быть классом, а не структурой)
let carList = List<CarData>()
затем, когда вы добавляете car в свойство Cars class CarList, он также будет записан в Realm как объект.
Итак, вот ваши объекты Realm
class CarData: Object {
@objc dynamic var name = ""
@objc dynamic var year = ""
}
class Cars: Object {
let carList = List<CarData>()
@objc dynamic var index = -1
@objc dynamic var newCar = false
}
предположим, что ваш объект Cars — это все объекты McLaren, и мы назвали его allMcLarens. Вот добавление автомобиля в этот список
let myCar = CarData()
myCar.name = "570GT"
myCar.year = "2019"
try realm.write {
allMcLarens.carList.append(myCar)
}
Многое из этого также описано в руководстве по началу работы с Realm.