使用 plist 中的数据填充 table

Populating a table with data from a plist

我正在按照 Objective C 中编码的 Ray Wenderlich 教程从 plist 填充 table。我正在努力将以下代码从 Objective C 转换为 Swift:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
   {
     NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES selector:@selector(localizedCompare:)];
     NSArray* sortedCategories = [self.articleDictionary.allKeys sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

      NSString *categoryName = [sortedCategories objectAtIndex:section];

      NSArray *currentCategory = [self.articleDictionary objectForKey:categoryName];

return [currentCategory count];
}

当我转换如下:

var sortDescriptor:NSSortDescriptor = NSSortDescriptor(key: nil, ascending: true, selector: "localizedCompare:")

我收到一个编译器错误,指出“调用中有额外参数 'selector'

然后当我尝试以下行时,我得到 XCode 建议我使用:

let sortedCategories:NSArray = [articleDictionary.allKeys.sort(<#isOrderedBefore: (AnyObject, AnyObject) -> Bool##(AnyObject, AnyObject) -> Bool#>)]

有什么建议吗?

问题似乎出在为密钥传递 nil,尽管您收到了错误消息(Swift 的错误消息并非如此 swift)。如果您不需要密钥,那么您应该使用 sortedArrayUsingSelector: 代替,

let keys: NSArray = articleDictionary.allKeys
var sortedCategories = keys.sortedArrayUsingSelector("localizedCompare:")

如果将空字符串(而不是 nil)作为关键参数传递给 sortDescriptorWithKey:ascending:selector,它似乎也有效: