"Int"不可转换为"范围<Int>"



我有一个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;
}]

帕斯宾:http://pastebin.com/U63TFMRV

这一行让编译器感到困惑:

let restaurantNames = finalRestaurantArray.map { $0.objectForKey("Name") }

这会产生一个编译器难以处理的[AnyObject?],并且您遇到的错误通常令人困惑(由于各种升级和重载)。

第 1 步是您应该尽可能避免AnyObject。所以finalRestaurantArray应该是实际对象的数组,而不是[AnyObject],甚至是字典。然后,您的地图将返回一个[String],就像我相信您希望的那样。

你可以像这样把它破解到位:

// Avoid this
let restaurantNames = finalRestaurantArray.map { $0.objectForKey("Name") as String }

如果出现任何问题,它就会崩溃。别这样。尽可能快地将数据从AnyObject中取出(并尽可能快地将其从Dictionary中取出),并将其转换为真实的模型对象,以保证它们将返回值。

最新更新