Swift 泛型函数的一个特定的简单场景使用

在Objective-C常用id<**Delegate>来应用一些定义的代理协议类,在业务逻辑处理的类中采用注册类([XXHandler class])的方式做为一个处理器类的实例引用,如下:

- (void)registeConfigurationClass:(__unsafe_unretained Class)className
{
    self.configuration = [[className alloc] init];
}

但在Swift如果用AnyClass来实例化对象则需转为指定类的Type,才能进行实例化,如下:

    let anyClass: AnyClass = xxx
    let viewControllerClass: UIViewController.Type = anyClass as UIViewController.Type
    let viewController = viewControllerClass()

故而通过以上途径是否不能解决?还好我们有泛型函数,定义了一个名为regsiterClass的泛型函数,来注册一个处理器类:

protocol WDHandleProtocol {
    func generateSomething() -> String
}

class WDResponder: NSObject {
    
    var handler: WDHandleProtocol?
    
    func regsiterClass(handler: T) -> Void {
        self.handler = handler
    }
}

参数:handler参数是类型T,T是一个占位类型参数,必需遵循WDHandleProtocol协议。

这个函数的类型参数列紧随在两个类型参数需求的后面:

这样能够使regsiterClass函数能切换注册的处理器,还可注册多个处理器,这个看具体的业务场景,即便他们是不同的处理器,只需改变regsiterClass函数实现中对处理器的引用方式即可。

你可能感兴趣的:(Swift 泛型函数的一个特定的简单场景使用)