到目前为止,我所拥有的是:
-
我已经定义了
typealias
完成处理程序typealias UserCompletionHandler = (_ object: User?, _ error: ApiError?) -> Void
-
我创建了一个服务函数,它使用这个类型别名
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))