SETUP
JSON
{
data: [
{
owner: "FREDL",
street: "Apothekergasse 1",
latitude: "48.261900",
longitude: "11.445200"
}
],
meta: "Testmeta"
}
AED CLASS
class AED: NSObject {
let owner: String
let street: String
let mapType: String
let coordinate: CLLocationCoordinate2D
init(owner: String, street: String, mapType: String, coordinate: CLLocationCoordinate2D) {
self.owner = owner
self.street = street
self.mapType = mapType
self.coordinate = coordinate
super.init()
}
}
问题
我想在结果项上使用map
函数为API提供的每个结果创建一个AED
对象。
func getAvailableAEDsInRange(#latitude: Float, longitude: Float) {
Alamofire.request(MFNetworkController.Router.getAEDInRange(latitude: latitude, longitude: longitude)).responseJSON() {
(_, _, JSON, error) in
if error == nil {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let aedInfo = ((JSON as! NSDictionary).valueForKey("data") as! [NSDictionary])
aedInfo.map() {
(...)
}
println(aedInfo)
}
}
}
}
错误消息
Cannot invoke 'map' with an argument list of type '((_) -> _)'
问题
$0["owner"]
访问参数时,为什么会出现此错误消息?println($0["owner"]
时,我得到一个结果,错误就消失了。为什么可以访问?更新
我改变了问题功能,如上所示。当我将代码分成:
let aedInfo = ((JSON as! NSDictionary).valueForKey("data") as! [NSDictionary])
和
aedInfo.map() {}
然后我已经收到错误消息:
Cannot invoke 'map' with an argument list of type '((_) -> _)'
aedInfo的输出是:
[{
latitude = "48.261900";
longitude = "11.445200";
owner = FREDL;
street = "Apothekergasse 1";
}]
我预期的是字典数组。但是为什么map函数会返回错误?
更新2
我找到了一个关于Ray Wenderlich的例子,他采取了相同的方法。但没有错误。差异在哪里呢?
// 3 Alamofire.request(Five100px.Router.PopularPhotos(self.currentPage))。responseJSON(){
中的(_,_,JSON,错误)if error == nil {
// 4
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
// 5, 6, 7
let photoInfos = ((JSON as! NSDictionary).valueForKey("photos") as! [NSDictionary]).filter({ ($0["nsfw"] as! Bool) == false }).map { PhotoInfo(id: $0["id"] as! Int, url: $0["image_url"] as! String) }
// 8
let lastItem = self.photos.count
// 9
self.photos.addObjectsFromArray(photoInfos)
// 10
let indexPaths = (lastItem..<self.photos.count).map { NSIndexPath(forItem: $0, inSection: 0) }
// 11
dispatch_async(dispatch_get_main_queue()) {
self.collectionView!.insertItemsAtIndexPaths(indexPaths)
}
self.currentPage++
}
}
self.populatingPhotos = false
} }
答案 0 :(得分:1)
Xcode因其在Swift中出错的原因而无法信任,但您可以相信它在正确的位置指出它:)
CLLocationCoordinate2dMake() as! Float
会产生错误。因为您无法将结构转换为数字。
删除as! Float
,您的错误就会消失。