微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在尝试快速创建类,该类可以使用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 )
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。