我正在学习迅速并陷入困境:
我有一个返回数组的函数。此函数在内部调用另一个闭包,我想将闭包结果作为返回值传递给该函数。
这是我的代码设置方式
func setData() -> [City] {
let conn = ApiConnection()
conn.get_cities{ citiesList in
return (citiesList)
}
}
执行此操作时,出现错误消息“无法将类型'()'的返回表达式转换为类型'城市'?”
请告知如何将城市列表返回到我的函数
答案 0 :(得分:1)
如果闭包 get_cities 是不可转义的闭包,则只需返回
即可func setData() -> [City] {
let conn = ApiConnection()
return conn.get_cities{ citiesList in
return (citiesList)
}
}
如果是转义的闭包,则不要直接从函数返回列表,而应使用类似
的完成处理程序func setData(completion: @escaping (([CityList]) -> Void)) {
let conn = ApiConnection()
conn.get_cities{ citiesList in
completion(citiesList)
}
}
答案 1 :(得分:0)
您不能直接返回closure
结果。封闭结果将在以后完全填充。为此,您必须传递一个采用类似参数的闭包。
func setData(completion: (([YOUR_CITY_CLASS]) -> void) ) {
let conn = ApiConnection()
conn.get_cities(completion)
}
注意:由于这是一个api调用,很可能是一个转义的闭包,在这种情况下,函数的声明就像下面的
func setData(completion: @escaping (([YOUR_CITY_CLASS]) -> void))