从关闭返回功能

时间:2019-04-07 07:15:58

标签: ios swift closures

我正在学习迅速并陷入困境:

我有一个返回数组的函数。此函数在内部调用另一个闭包,我想将闭包结果作为返回值传递给该函数。

这是我的代码设置方式

func setData() -> [City] {
  let conn = ApiConnection()
  conn.get_cities{  citiesList in
    return (citiesList)
  }
 }

执行此操作时,出现错误消息“无法将类型'()'的返回表达式转换为类型'城市'?”

请告知如何将城市列表返回到我的函数

2 个答案:

答案 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))