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

ImanX

我想设置通用类型参数的情况下通用对象封装在另一个类中我创建了一个基类,并从中定义了其他子类。例:Animal<T>

public class Animal<T: YummyObject> {
    // Code
}

public class Dog: Animal<Bark> {
    // Code
}

public class Cat: Animal<Meow> {
    // Code
}

下面扩展中定义了一个没有类型参数Animal属性UITableView

extension UITableView {
    private static var animal: Animal!

    func addAnimal(animal: Animal) {
        UITableView.animal = animal
    }
}

但这样做时出现以下编译错误:

引用泛型类型Animal需要使用参数<...>

这似乎在Java中工作正常我怎样才能在Swift中完成同样的事情

保罗·马托斯

Swift尚未像Java一样支持通配符样式的泛型Animal<?>这样,一种常见的模式是定义一个类型擦除的超类,协议(或包装器)来启用这种用法。例如:

public class AnyAnimal {
    /* non-generic methods */
}

然后将其用作您的超类:

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

最后,AnyAnimal改为在您的非通用代码中使用:

private static var animal: AnyAnimal!

Swift标准库中的示例对于一个实际的例子,看到了KeyPathPartialKeyPathAnyKeyPath类层次结构。它们遵循我上面概述的相同模式。集合框架提供甚至进一步型擦除的例子,但使用包装器来代替。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

没有参数时如何获取泛型类型的类?

如何在具有泛型参数和返回类型方法的Java中使用反射获取类的实例?

如何在类中使用扩展的泛型类型的类型?

如何在接口的方法中使用泛型类型参数

如何在参数需要类中使用泛型

如何在Java中使用泛型类型获取类

如何在Swift泛型类中使用AnyClass

如何在非泛型静态类的多个方法中使用相同的泛型类型

如何使用已知类型作为参数创建具有泛型的泛型类?

如何在没有泛型类型参数的情况下定义泛型函数?

是否可以创建没有类型参数的泛型类?

如何在Swift中使用约束为泛型类型和协议的属性来初始化类

如何在Kotlin中获取泛型类型参数的类

没有类型参数的泛型类型的泛型结构

如何在C#中的泛型类型参数中使用Switch ... Case?

如何在函数调用中使用Typescript泛型类构造函数作为参数

如何使用泛型类型数组和泛型类型类作为构造函数中的参数?

如何使用有界类型参数扩展泛型类

如何使用泛型类型参数获取类的所有属性

没有类类型的泛型方法?

如何在PyQt子类中没有泛型冲突的情况下使用泛型类型?

如何在Swift中使用泛型对另一个类进行子类化?

如何在C#中的泛型类中使用泛型类的对象?

如何在Swift 3中使用关联类型的参数调用泛型函数

如何在派生类型中使用泛型方法

如何在Nim中使用默认泛型类型?

如何在扩展方法中使用泛型类型成员?

如何在静态类中使用泛型

如何在TypeScript中使用泛型检测类实例