我有一个 NSManagedObject
的子类.我正在使用一个协议(protocol)来创建一个“包装器”类。在我的 Controller 中,数据可以是:Items
或 Item1
.能够使用我的 function
我必须添加协议(protocol) 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)
}
}
但这似乎不是正确的方法......
最佳答案
如果我正确理解你想要实现的目标(函数接受两种类型),我会使用协议(protocol)作为函数接受的类型,引用下面的代码
class Items: NSManagedObject, ItemInfo {
@NSManaged var name: String
@NSManaged var code: String
}
class Item1: NSManagedObject, ItemInfo {
@NSManaged var name: String
@NSManaged var code: String
}
protocol ItemInfo {
var name: String {get set}
var code: String {get set}
}
函数看起来像这样
func handle(item: ItemInfo) {
print(item.code)
print(item.name)
}
关于swift - 接受泛型参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52341339/