【发布时间】:2021-10-14 23:24:06
【问题描述】:
我正在阅读 Armad Sahar 的教科书“iOS 14 Programming for Beginners”。 MapDataManager 类中有以下代码,我被困了好几天。
import Foundation
import MapKit
class MapDataManager: DataManager {
fileprivate var items: [RestaurantItem] = []
var annotations: [RestaurantItem] {
return items
}
func fetch(completion:(_ annotations:[RestaurantItem]) ->()){
if items.count > 0 { items.removeAll() }
for data in load(file: "MapLocations") {
items.append(RestaurantItem(dict: data))
}
completion(items)
}
func currentRegion(latDelta: CLLocationDegrees, longDelta: CLLocationDegrees) -> MKCoordinateRegion {
guard let item = items.first else {
return MKCoordinateRegion()
}
let span = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: longDelta)
return MKCoordinateRegion(center: item.coordinate, span: span)
}
}
我的问题是关于 fetch 功能。根据我的理解,fetch函数接受另一个函数作为变量,命名为completion,我应该在completion之后的:之后声明函数的“类型”,应该是@ 987654325@ 给我,因为我们尝试输入一个[RestaurantItem] 数组,然后复制并输出一个新的[RestaurantItem] 数组。
但现在看来(_ annotations:[RestaurantItem]) -> () 变成了完成函数的“类型”,输入变量类型是(_ annotations:[RestaurantItem]),在我看来根本不像一个类型。我以为类型可能是Int、String、[RestaurantItem] 等,_ annotations:[RestaurantItem] 类型到底是什么???
为什么返回参数Void ()?显然,完成处理程序有 return 关键字,它返回一个类型为 [RestaurantItem] 的项目!!!
请帮助...我是 Swift 新手,我周围没有朋友可以帮助我...
博斯科
【问题讨论】:
标签: ios swift completionhandler computed-properties