ios – 如何在Swift中使用没有类型参数的泛型类?

ios – 如何在Swift中使用没有类型参数的泛型类?,第1张

概述我想在不设置泛型类型参数的情况下将通用对象封装在另一个类中.我创建了一个基础Animal< T>类并从中定义其他子类.例: public class Animal<T: YummyObject> { // Code}public class Dog: Animal<Bark> { // Code}public class Cat: Animal<Meow> { 我想在不设置泛型类型参数的情况下将通用对象封装在另一个类中.我创建了一个基础Animal< T>类并从中定义其他子类.例:
public class Animal<T: YummyObject> {    // Code}public class Dog: Animal<bark> {    // Code}public class Cat: Animal<Meow> {    // Code}

并在下面的UItableVIEw扩展中定义了一个没有type参数的Animal属性:

extension UItableVIEw {    private static var animal: Animal!    func addAnimal(animal: Animal) {        UItableVIEw.animal = animal    }}

但是这样做时我得到以下编译错误:

Reference to generic type Animal requires arguments in <...>.

这似乎在Java中运行良好.我怎么能在Swift中完成同样的事情呢?

解决方法 Swift还不像Java那样支持 wildcard-style generics(即Animal<?>).因此,常见的模式是定义类型擦除的超类,协议(或包装器)来代替使​​用这种用法.例如:
public class AnyAnimal {    /* non-generic methods */}

然后将它用作您的超类:

public class Animal<T: YummyObject>: AnyAnimal {    ...}

最后,在非通用代码中使用AnyAnimal:

private static var animal: AnyAnimal!

Swift标准库中的示例.有关实际示例,请参阅KeyPath,PartialKeyPathAnyKeyPath类层次结构.它们遵循我上面概述的相同模式. Collections framework提供了更进一步的类型擦除示例,但使用了包装器.

总结

以上是内存溢出为你收集整理的ios – 如何在Swift中使用没有类型参数的泛型类?全部内容,希望文章能够帮你解决ios – 如何在Swift中使用没有类型参数的泛型类?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1100154.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存