提问者:小点点

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


到目前为止我所掌握的是:

>

  • 我定义了typealias完成处理程序

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

    我创建了一个服务函数,它使用这个typealias

    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)
    

    或者更好地使error参数可选,因此我可以只调用

       completion(object: user)
    

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


  • 共1个答案

    匿名用户

    显然这是不可能的。您可以在swift evolution提案中找到这个选择背后的解释:0111-remove-arg-label-type-significance.md

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