arrays - 'Int' 不能转换为 'Range<Int>

标签 arrays swift

我有一个 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/

相关文章:

PHP MySQL 插入数据库

ios - 在应用程序运行时获取用户位置,并在使用按钮四处移动后再次重新居中

ios - Swift - 无法从文件读取/写入

ios - 协议(protocol) 'View' 只能用作通用约束,因为它具有 Self 或关联类型要求

ios - NSOperationQueue 内的 NSOperation 中的异步回调永远不会被调用

c++ - 根据世界位置在一维数组中查找通用项目?

jquery - 容器中的每个 div 都比前一个 div 更不透明

java - 在 ListView 上滚动会创建重复的元数据项

ios - awakeFromNib() 不适用于模拟指标

c++ - 有什么方法可以定义动态数组而无需确定其大小