У меня есть подкласс NSManagedObject
.Я использую протокол для создания класса-оболочки.В моем контроллере данные могут быть: Items
или Item1
.Чтобы использовать мой function
, мне нужно будет добавить протокол ItemInfo
к Items
, но это означает, что мне придется добавить
var items: Items { return self }
в Items
, что выглядит какнемного избыточно.Я попытался создать базовый класс, но это не сработало.
Вопрос:
Есть ли лучший способ, позволяющий моей функции принимать Items
и Item1
в качестве параметра, как при использовании дженериков?
NSManagedObject
:
class Items: NSManagedObject {
@NSManaged var name: String
@NSManaged var code: String
}
Protocol
:
protocol ItemInfo {
var item: Items { get }
}
extension ItemInfo {
var name : String { return item.name }
var code : String { return item.code }
}
Wrapper
:
class Item1: ItemInfo {
let item: Items
init(item: Items) { self.item = item }
}
function
:
func handleItem(item: ItemInfo) {
print(item.name)
print(item.code)
}
Я мог бы использовать:
func handleItem<T>(item: T) {
if let a = item as? Items {
print(a.name)
print(a.code)
}
if let a = item as? ItemInfo {
print(a.name)
print(a.code)
}
}
Но это не совсем правильный путь ...