什么时候在Swift中使用泛型

时间:2017-11-16 10:44:53

标签: ios swift

我研究过仿制药但是我仍然没有理解,为什么要使用它们呢?当我们可以使用协议时呢?

例如,检查以下功能:

public static func delete<T>(entity: T, auth: Auth) -> Observable<Void> where T: MSRequestEntity, T: DictConvertable {

// function do something
    }

好的,我们有通用实体T,它符合MSRequestEntity和DictConvertable。

但我们可以简单地重写这个:

public static func delete(entity: MSRequestEntity & DictConvertable, auth: Auth) -> Observable<Void> {

    // function do something
        }

所以,我的问题是,在什么情况下我应该使用泛型?我有成像的所有情况都可以通过协议轻松处理。

1 个答案:

答案 0 :(得分:2)

如果您提供的是正确的。它并不一定通过使其成为通用来添加任何东西。

但是举一个你有一些协议MyProtocol的例子,你想要创建一个带有其中两个并返回第三个的函数。但该功能仅在firstsecond属于同一类型时才有效...

func combine(first: MyProtocol, second: MyProtocol) -> MyProtocol {
    // do some combining here.
}

现在定义不太明确,因为此处firstsecond可能属于不同的类型。唯一需要的是它们符合协议。什么是返回类型?

现在考虑......

function combine<T: MyProtocol>(first: T, second: T) -> T {
    // do some combining here
}

现在该函数是通用的,但增加的是仍然firstsecond必须符合协议。但现在它们必须属于同一类型。该函数将返回与firstsecond相同类型的其他项目。

在这种情况下,您肯定会从使用泛型而不仅仅是协议中受益。