【问题标题】:Swift Array syntaxSwift 数组语法
【发布时间】:2015-04-04 00:05:21
【问题描述】:

每次我在这里问问题,都是因为我不知道要搜索什么,对此我感到非常抱歉。

无论如何,我正在尝试使用 Google Maps SDK 创建一个应用程序,并且我遵循了 Ron Kliffer 在 Ray Wenderlich 的网站上的一个非常好的教程。但是,我想对其进行大量自定义,因此我尝试阅读每一行并了解它的作用。现在我遇到了一个我不理解语法的块。

func fetchPlacesNearCoordinate(coordinate: CLLocationCoordinate2D, radius: 
Double, types:[String], completion: (([GooglePlace]) -> Void)) -> ()

这就是被调用的函数,这样:

dataProvider.fetchPlacesNearCoordinate(coordinate, radius:mapRadius, types: searchedTypes) { places in
  for place: GooglePlace in places {

我根本不明白完成:位和“放置”位。接下来是,如果我没记错的话,一个“foreach”的东西(或 Swift 语法中的 for in。

编辑:重新格式化

Edit2:是的,在函数体中创建了一个 GooglePlaces 数组,并且在 forin-thing 中使用了相同的数组(我猜)。

【问题讨论】:

标签: ios xcode google-maps swift


【解决方案1】:
{    places in
     for place: GooglePlace in places {
         // ...
     }
}

是一个闭包。一般closure expression syntax

{ (param_1 : type_1, ..., param_n : type_n ) -> return_type in
    statements
}

当闭包类型已知或可以从上下文推断时,您可以省略参数类型、返回类型(以及参数周围的括号):

{ param_1, ..., param_n in
    statements
}

所以第一个places 是(唯一的)闭包参数,它是 在 for-in 语句中使用。

请注意,由于闭包的类型为([GooglePlace]) -> Voidplaces 参数的类型为 [GooglePlace] 和 for-in 循环中的显式类型注释不是必需的:

{    places in
     for place in places {
         // ...
     }
}

【讨论】:

  • 你在宠我,马丁!非常感谢,再次。
  • 所以,如果我假设这是使用闭包的主要原因,我是对的:闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用.这被称为关闭这些常量和变量,因此称为“闭包”。 Swift 为您处理所有捕获的内存管理。 因为闭包本身包含对 viewController 中一些 IBOutlets 的引用。
猜你喜欢
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多