繁体   English   中英

是否有可能 swift func get<T> 枚举?

[英]is it possible swift func get <T> enum?

有两个 func 从参数中获取枚举,是否有可能这些 func 仅组合了一个 func?

func rushdownSetupListener(event: RushdownListenEvent, handler: @escaping ([Any], SocketAckEmitter) -> Void) -> UUID? {
        guard let client = self.client else {
            return nil
        }
        
        let listenerId = client.on(event.rawValue, callback: handler)
        
        return listenerId
    }
    
    func hystoriaSetupListener(event: HystoriaListenEvent,handler: @escaping ([Any], SocketAckEmitter) -> Void) -> UUID? {
        guard let client = client else {
            return nil
        }
        let listenerId = client.on(event.rawValue, callback: handler)
        
        return listenerId
    }

由于这两个枚举都有一个String作为其原始值,因此它们都符合RawRepresentable where RawValue == String 因此,您可以引入一个严格限制为的泛型参数类型:

func setupListener<EventType>(event: EventType, handler: @escaping ([Any], SocketAckEmitter) -> Void) -> UUID? 
    where EventType: RawRepresentable, EventType.RawValue == String {
    guard let client = self.client else {
        return nil
    }
    
    let listenerId = client.on(event.rawValue, callback: handler)
    
    return listenerId
}

您甚至应该能够将函数体简化为:

client?.on(event.rawValue, callback: handler)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM