如何为具有命名参数的完成处理程序创建类型别名



到目前为止,我所拥有的是:

  1. 我已经定义了typealias完成处理程序

    typealias UserCompletionHandler = (_ object: User?, _ error: ApiError?) -> Void
    
  2. 我创建了一个服务函数,它使用这个类型别名

    func login(email: String, password: String, completion: UserCompletionHandler) {
    // ...
    // this part here handles API call and parsing logic
    // ...
    completion(user, nil)
    }
    

我想要实现的是通过引入命名参数来获得更可读的带有参数的完成回调。最终的想法是:

completion(object: user, error: nil)

或者更好的是使错误参数可选,这样我就可以调用

completion(object: user)

问题是,我找不到更改typealias定义的方法来实现这一点。

显然这是不可能的。你可以在快速进化建议中找到这个选择背后的解释:0111-remove-arg-label-type-significance.md

函数类型只能根据形式参数和返回值的类型来定义。写出包含参数标签的函数类型将被禁止

不确定这个答案是否理想,但可以使用元组作为输入参数:

typealias UserCompletionHandler = ((object: User?, error: ApiError?)) -> Void

用法如下:

completion((object: user, error: nil))

最新更新