我有一个 PFObjects
数组,我创建了一个新数组:restaurantNames
来存储它们的所有名称。现在我试图在 UIPageView 上打印名称,但出现错误:
'Int' is not convertible to 'Range<Int>'
代码:
private func getItemController(itemIndex: Int) -> PageItemController? {
let restaurantNames = finalRestaurantArray.map { $0.objectForKey("Name") }
if itemIndex < finalRestaurantArray.count {
let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("ItemController") as PageItemController
pageItemController.itemIndex = itemIndex
pageItemController.restaurantName = restaurantNames[itemIndex]
//pageItemController.imageName = finalRestaurantArray[itemIndex]
return pageItemController
}
return nil
}
实际的 PFObject 数组看起来像这样(restaurantNames
包含仅包含名称的数组):
[<Restaurant: 0x7feb9252cfc0, objectId: LA74J92QDA, localId: (null)> {
Name = "Restaurant 1";
City = "New York";
Closed = 1;
Country = "United States";
FoodType = Japanese;
}, <Restaurant: 0x7feb926afa00, objectId: 0aKFrpKN46, localId: (null)> {
Name = "Restaurant 2";
City = "San Francisco";
Closed = 1;
Country = "United States";
FoodType = Italian;
}]
Pastebin:http://pastebin.com/U63TFMRV
最佳答案
这一行让编译器感到困惑:
let restaurantNames = finalRestaurantArray.map { $0.objectForKey("Name") }
这会创建一个 [AnyObject?]
,这是众所周知的编译器难以处理的问题,而且您得到的错误通常令人困惑(因为各种提升和重载)。
第 1 步是您应尽可能避免 AnyObject
。所以 finalRestaurantArray
应该是实际对象的数组,而不是 [AnyObject]
,甚至是字典。然后你的 map 会返回一个 [String]
就像我相信你想要的那样。
您可以像这样破解它:
// Avoid this
let restaurantNames = finalRestaurantArray.map { $0.objectForKey("Name") as String }
如果出现任何问题,它就会崩溃。不要那样做。尽可能快地从 AnyObject
中获取数据(并尽可能快地从 Dictionary
中获取数据),并将其转换为真实的模型对象保证它们会返回一个值。
关于arrays - 'Int' 不能转换为 'Range<Int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28099082/