swift - 接受泛型参数的函数

标签 swift generics protocols

我有一个 NSManagedObject 的子类.我正在使用一个协议(protocol)来创建一个“包装器”类。在我的 Controller 中,数据可以是:ItemsItem1 .能够使用我的 function我必须添加协议(protocol) ItemInfoItems但这意味着我必须添加

var items: Items { return self }

Items ,这似乎有点多余。我试过创建一个基类,但没有成功。


问题:

有没有更好的方法让我的函数同时接受 ItemsItem1作为参数就像使用泛型一样?


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/

相关文章:

Swift:如何使我的自定义结构 Node<T> 符合 Hashable?

c# - 是否建议将泛型用于大量数据?

c - 奇怪的 Linux 套接字协议(protocol)行为

ios - 什么是通过 Enum 进行可重用 UIAlertController 配置的 Swift 最佳实践

swift - 将 NavigationBar subview 放在 NavigationBarItem 和标题后面

swift - 雪碧包 : How do you call touches began & in touches separately?

Python:输入一个接收类型并返回该类型实例的通用函数

java - google protocol buffers如何在protocol buffers proto文件中定义List<Object>

ios - 可重复使用的 tableview 单元格相互影响而无需交互

ios - NSURLConnection 委托(delegate)方法未在泛型类中调用