如何创建闭包调用带有较少参数的闭包迅速

问题描述

我正在尝试快速创建类,该类可以使用0..N参数作为闭包,然后在调用带有N参数的回调函数时,仅将所需的数量传递给闭包。 我正在尝试这样做:

class CallbackImpl: AuthServicelogoutCallback {
    private let callback: ((UUID,AuthServicelogoutType) -> Void )?
    
    public init( cb: @escaping ((UUID,AuthServicelogoutType) -> Void ))
    {
        callback = { cb( $0,$1 ) }
    }
    
    public init( cb: @escaping ((UUID) -> Void ))
    {
        callback = { cb( $0 ) }
    }
    
    public init( cb: @escaping (() -> Void ))
    {
        callback = { cb() }
    }
    
    public func onEvent(_ userId: UUID,type: AuthServicelogoutType)
    {
        callback!( userId,type )
    }
}

带有两个参数的闭包的第一次初始化是可以的,带有1和0参数的闭包的初始化给我错误表达式类型'()'是模棱两可的,没有更多上下文

做这种事情的正确方法是什么?

解决方法

如果您提供有关正在使用哪个闭包参数而没有使用哪个闭包参数的更多上下文,则可以实现您正在尝试的事情

class CallbackImpl: AuthServiceLogoutCallback {
    private let callback: ((UUID,AuthServiceLogoutType) -> Void)?
    
    public init(cb: @escaping ((UUID,AuthServiceLogoutType) -> Void)) {
        callback = { cb($0,$1) }
    }
    
    public init(cb: @escaping ((UUID) -> Void)) {
        callback = { uuid,_ in cb(uuid) }
    }
    
    public init(cb: @escaping (() -> Void)) {
        callback = { _,_ in cb() }
    }
    
    public func onEvent(_ userId: UUID,type: AuthServiceLogoutType) {
        callback!( userId,type )
    }
}