解决这个完成块
Posted
技术标签:
【中文标题】解决这个完成块【英文标题】:Solve this completion Block 【发布时间】:2020-01-05 04:17:35 【问题描述】:我正在尝试,但我一直收到很多警告。
Xcode 给我警告
无法将类型“()”的返回表达式转换为返回类型“[AirportModel]”
对不起,我是一个初学者...在这次关闭中有点迷失...
我必须返回 AirportModel
的这个向量才能在 swiftUI 的列表中显示,我想使用 DispatchQueue
以避免在搜索时阻塞视图:
func filter (valoreSearhed: String, arrayTosearh: AirportVector, completionBlock: (_ airports: [AirportModel]) -> Void) -> [AirportModel]
DispatchQueue.global().async
let results = arrayTosearh.filter $0.aptICAO.localizedCaseInsensitiveContains(valoreSearhed)
completionBlock(results)
【问题讨论】:
【参考方案1】:问题不在于关闭。
问题是你定义了这个filter
方法来返回一个[AirportModel]
,但它没有。去掉函数声明末尾的-> [AirportModel]
。你没有从这个函数返回任何东西。您正在使用完成处理程序将结果传回。
顺便说一句,别忘了把你的关闭也标记为@escaping
。
【讨论】:
【参考方案2】:我故意假设它应该返回临时空数组,所以我推荐以下
func filter (valoreSearhed: String, arrayTosearh: AirportVector, completionBlock: @escaping (_ airports: [AirportModel]) -> Void) -> [AirportModel]
DispatchQueue.global().async
let results = arrayTosearh.filter $0.aptICAO.localizedCaseInsensitiveContains(valoreSearhed)
completionBlock(results)
return []
【讨论】:
以上是关于解决这个完成块的主要内容,如果未能解决你的问题,请参考以下文章