Код, над которым я сейчас работаю (унаследованный от другой команды), имеет уровень сохраняемости, основанный на CoreData .
Одна из сущностей называется «Уведомление», и она представляет сообщения, периодически опрашиваемые клиентским приложением из серверной части (не связанные с APS); соответствующий подкласс NSManagedObject определяется следующим образом:
import Foundation
import CoreData
@objc(Notification) public class Notification: NSManagedObject {
// etc...
Само собой разумеется, это имя класса затеняет одноименный тип Foundation (аналог NSNotification в Objective - C сторона). Приложение не использует механизм NotificationCenter, поэтому до сих пор это не было проблемой.
Теперь мне нужно ввести уведомления для некоторых моих классов, чтобы они наблюдали определенные события на уровне приложения, а я не хочу чтобы каждый раз устранять неоднозначность, например,
let notification = Foundation.Notification.Name(...
Я знаю, что не могу изменить имена классов своих объектов CoreData без нарушения совместимости, но я думал, что @objc(Notification)
позволит мне изменить Название класса Swift; например:
@objc(Notification) public class AppNotification: NSManagedObject {
// ^ This stays the same ^ This changes
... в конце концов, CoreData - это Objective- C API. Имеет смысл, что, если мне нужно явно указать имя класса Objective- C, связанного с мостом, возможно, я смогу обойтись именем класса Swift, которое отличается от модели.
Но нет, мое приложение вылетает если я внесу указанные выше изменения.
Есть ли способ обойти это, или я застрял с ужасным решением (и отсутствием предвидения) первоначального автора?