当前位置: 首页 > 知识库问答 >
问题:

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

郎鹤龄
2023-03-14

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

>

  • 我定义了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个答案

    竺焕
    2023-03-14

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

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

     类似资料:
    • 我基本上想有一个可选的完成处理器,没有参数被传递回来。这是我目前掌握的情况,但显然是错误的。 我不想在完成块中传递任何参数。我只想知道网络调用何时完成,以便刷新UI。我不想在这里刷新UI,因为我希望它充当刷新数据的通用函数。我之所以希望完成处理程序是可选的,是因为有时候刷新完成后我不需要做任何事情。 我也很困惑“逃离”是什么意思。当我做这样的事情时,我通常会有它,但任何清晰都会很好。我在网上做了一

    • 我在地图中的几个位置进行反向地理编码,并希望将其包装为某种常用方法。我所拥有的是作为工作起点的: 但是,如果我想在我的完成方法中添加另一个参数,将会向我的视图返回错误,如下所示: 如果error为,那么我的将失败,因为错误为nil且访问错误。但我不能这样做,因为参数与完成处理程序不匹配。 因此,如果我有一个nil错误,我将如何调用我的完成处理程序?

    • 我正在创建一个我想经常重用的AnyLogic代理。在许多AnyLogic代理和组件中,有一些空间可以输入代码,如“on receive”、“Action”或“function body”。在构建模型时,这些将被编译到代理中。普通程序员是如何做到这一点的? 例如,假设我有这个代理(显然是伪代码): 客户端可能会使用它如下: 这可能吗?

    • 我目前正在学习swift,几个小时以来我一直在试图理解一个错误。由于查询,我试图从php脚本中获取一个xml文件,我使用一个完成处理程序作为回调来获取这些查询的结果。 问题是我对这些技术感到不舒服,它说缺少论据。 下面是使用完成处理程序的函数: 这是我调用这个函数的一段代码: 这段代码显示有关调用连接的此错误: 我做错了什么?为什么它要两个参数? 非常感谢您的帮助。 埃尔巴托

    • 问题内容: 我正在尝试创建一个,但是在方法中添加一些错误。 请帮助我如何添加参数以及如何将其传递给在其中声明a和的另一个函数。 我的另一个功能是insertData(…) 我正在尝试创建一个并将其传递给函数。但是,当我在第一个函数中调用方法时,它将引发错误。 错误是 你调用的对象是空的 问题答案: 如果不调用其构造函数(新),则不能使用任何变量(例如,参考对象),但是不能使用新变量直接对其进行初始