Я использую Core Data для определения моей модели.Альтернатива Core Data
1. Невозможно создать объекты на лету.
Я хочу, чтобы создать объект, как показано ниже, и продолжать добавлять значения к его свойствам.
let action = Action()
action.desc = "hello"
Но если вы используете классы базовой модели данных, вы не можете сделать это, потому что вы получите ошибку Failed вызвать назначенный инициализатору на NSManagedObject класса. Вы должны создать новые объекты, используя initWithEntity:insertIntoManagedObjectContext:
и все.
2. Нельзя использовать тип класса как возвращаемый тип функций.
При использовании основных данных я сохраняю отдельный файл, чтобы поместить все методы выбора/сохранения. В нем у меня есть метод, который использовался для извлечения всех объектов Action
в виде массива.
public func loadActions() -> [Action] {
let fetchRequest = NSFetchRequest()
let entityDescription = NSEntityDescription.entityForName("Action", inManagedObjectContext: managedObjectContext!)
fetchRequest.entity = entityDescription
var error: NSError?
let result = managedObjectContext?.executeFetchRequest(fetchRequest, error: &error)
return result!
}
Я не могу использовать тип Action
для создания типизированного массива, потому что я получаю метод ошибки не могут быть объявлены общественности, поскольку его результат использует внутренний тип. Поэтому я должен получить массив как массив AnyObject
s, а затем отбросить их до Action
всякий раз, когда я должен их использовать.
3. Невозможно иметь методы в классе.
Я знаю, что вы могли бы создать категории в Objective-C и поместить в него все методы. Я думаю, что эквивалент в Swift - это расширения (?). Но было бы неплохо, если бы у вас был класс и его методы в одном месте.
Скажем, я беру дорогу OO и создаю свою модель полностью, и это приводит к моему вопросу. Как и где я могу сохранить эти объекты?