Pull to refresh

Comments 21

UFO just landed and posted this here
Не могу сказать, никогда ими не пользовался.
А про лаконичность все-таки не смогу полностью согласиться — кодогенерация в Objective-C мне вполне нравилась. Делала ровно то, что требовалось от ORM. Думаю здесь тоже допилят, в противном случае буду использовать старые механизмы.
Спасибо за статью, вы молодец, но скоро обязательно кто то ответит вам, что CoreData это не ORM и, я надеюсь, вы не будете отвечать на подобного рода комментарии и тратить зря! своё время, лушче напишите ещё что нибудь полезное!
Кстати, в mogenerator уже висит pull request с начальной поддержкой swift-генерации
Так шаблоны для mogenerator можно писать уже сейчас. Благо синтаксис там простой.
Интересно, имеется ли хоть какой-то шанс увидеть Swift на других платформах (Windows, Linux)?
Думаю да, но существенная сила языка заключается в наличии библиотек и инструментов для работы с ним. Это уже существенная проблема.
Лично у меня желание пробовать связку Swift и Core Data на данном этапе отпало после того момента, как я увидел отсутствие генерации наследников NSManagedObject в Swift. Всё-таки, первая бета Xcode 6 грешит проблемами :)
Синтаксис Swift требует вот так дублировать тип CSDepartment?

let newDepartment : CSDepartment = NSEntityDescription.insertNewObjectForEntityForName(...) as CSDepartment

неужели нельзя написать

let newDepartment = NSEntityDescription.insertNewObjectForEntityForName(...) as CSDepartment

Это не придирка, просто еще не смотрел на Swift.
Нет, вы абсолютно правы — этого можно и не писать. Лично мне это немного облегчает читаемость кода при его быстром просмотре — когда ты явно видишь тип в начале строки, а не в конце. При работе на маленьком мониторе или при 3-4 уровне вложенности метода/цикла/ветвления — строка уже становится трудночитаемой быстрым взглядом.
Зачем объявлять managedModel через вспомогательную переменную?
//Managed Model
var _managedModel: NSManagedObjectModel?
var managedModel: NSManagedObjectModel{
  if !_managedModel{
    _managedModel = NSManagedObjectModel.mergedModelFromBundles(nil)
  }
  return _managedModel!
}

Разве нельзя сделать как-то так:
@lazy var managedModel = NSManagedObjectModel.mergedModelFromBundles(nil)

То же самое касается всех схожих участков кода.
Спасибо за мысль, интересное направление. Но с наскока не получается — в вашем варианте переменная все равно почему-то отдается nil. И также неприменимо, видимо, для свойств типа storeCoordinator — компилятор выдает ошибку вида «lazy attribute may not be sed in computed property».
Префиксы для классов теперь нельзя выставить сразу, потому что в Свифте теперь нормальный неймспейсинг, и префиксы не нужны.
Спасибо, буду знать.
Набросал Pull Request с возможными улучшениями/упрощениями. В частности исправил косяк номер два, который на самом деле самый мерзкий.
Спасибо за замечания — слил с основной веткой.
Не знаю уж бага это в Xcode 6 Beta или фича, но префиксы для классов собственных, чтобы не писать их всякий раз, теперь надо выставлять вручную. Сделать это можно во вкладке File Inspector если выбрать файл проекта.

Так это же в какой-то из сессий про Swift явно сказали, что префиксы больше не нужны, так как теперь есть полная поддержка кастомных модулей для всего по-дефолту. У каждого модуля свой неймспейс и теперь всякие ABCBaseClass превращаются в BaseClass в контексте нужного модуля.
Sign up to leave a comment.

Articles