如何在Swift Generic类中使用AnyClass

Pey*_*nkh 8 generics xcode ios swift swift2

我需要在我的通用基类中传递一个类型.

class SomeBaseClass<T: AnyClass> {
   // Implementation Goes here
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

从非协议的非类型'AnyClass'(又名'AnyObject.Type')继承

理想情况下,我想使用'T'作为特定类型而不是AnyClass,但AnyClass也可以.

谢谢

ABa*_*ith 5

T您可以指定:

class SomeBaseClass<T> {
    let type: T.Type

    init(type: T.Type) {
        self.type = type
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您打算使用T.Type很多东西,那么使用typealias

class SomeBaseClass<T> {
    typealias Type = T.Type
    let type: Type
    ...
}
Run Code Online (Sandbox Code Playgroud)

一些示例用法:

let base = SomeBaseClass(type: String.self)
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是T.Type可以表示结构和枚举以及类。


hen*_*nes 5

AnyObject如果希望类型为类,则应使用。

class SomeBaseClass<T: AnyObject> {
    // Implementation Goes here
}

// Legal because UIViewController is a class
let o1 = SomeBaseClass<UIViewController>()

// Illegal (won't compile) because String is a struct
let o2 = SomeBaseClass<String>()
Run Code Online (Sandbox Code Playgroud)