gpt4 book ai didi

ios - swift : Converting inline to trailing closures in function

转载 作者:行者123 更新时间:2023-11-28 10:02:09 25 4
gpt4 key购买 nike

所以我定义了以下函数:

public typealias RESTClosure = (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void
public func queryAllFlightsWithClosure(completionHandler : RESTClosure) {
// code ....
}

我可以这样调用这个函数:

func myResponseHandler(response: NSURLResponse!, data: NSData!, error: NSError!) -> Void {
// code ...
}

rest?.queryAllFlightsWithClosure(myResponseHandler)

然而,根据我对 Swift 的理解,如果一个函数的最后一个参数是一个闭包,它可以被转换成一个尾随闭包……但我遇到了一些语法困惑:

尝试 #1

rest?.queryAllFlightsWithClosure() {
println("Called with Closure")
}

错误:元组类型“(响应:NSURLResponse!,数据 NSData!,错误:NSError!)”和“()”具有不同数量的元素(3 对 0)

尝试 #2

rest?.queryAllFlightsWithClosure() (RESTClosure.self) {  // Xcode told me to add a .self
//...code
}

错误: 调用中参数 #1 缺少参数

我知道我很接近......但是有人可以在这里帮助我吗?

最佳答案

你的参数放在闭包里面,因为只有一个参数,你甚至可以省略括号:

rest?.queryAllFlightsWithClosure {
(response: NSURLResponse!, data: NSData!, error: NSError!) in

// code ...
}

如果您要访问 self 或闭包内的任何属性,您需要将 self 包含在捕获列表,像这样:

rest?.queryAllFlightsWithClosure {
[weak self] (response: NSURLResponse!, data: NSData!, error: NSError!) in

// code ...

// note that self is optional inside this closure b/c of [weak self]
self?.doSomething()
}

关于ios - swift : Converting inline to trailing closures in function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26633496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com