如何在Swift中将NSArray从Obj-C转换为Array?

时间:2016-01-29 08:42:38

标签: objective-c arrays swift nsarray

是的,我知道标题似乎有点显而易见,可以轻松搜索解决方案。我知道如何将1-D NSArray转换为Array,这很简单。

然而,这不是我的问题,因为我的NSArray不同。请参阅以下代码

NSArray *artists;

artists = @[@"Performed by: Legendary Group", @"Performed by: Ivan Cheong",
          @"Performed by: Tien Nguyen", @"", @[@"Performed by: DJ Happee From 
            Channel 3.3", @"Performed by: Adam Cease", @""], 
            @"Performed by: Music Between California and Summer", @""];

然后在cellForRowAtIndexPath中,我就要这样访问它了:

- (UITableViewCell *)tableView:(UITableView *)tableView 
   cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    if ( [ [artists[indexPath.section] objectAtIndex:indexPath.row] 
                isEqualToString:@""] )
    {
        ....
    }
}

正如您可以清楚地看到的,我的NSArray在索引4处包含另一个数组。我需要这个用于琐碎的目的。

我想知道是否可以将NSArray转换为Swift标准Array类型?

我试图实现等价物:

var temp = NSArray()

let artists = ["Performed by: Legendary Group", "Performed by: Ivan Cheong",   
           "Performed by: Tien Nguyen", "", ["Performed by: DJ Happee From 
        Channel 3.3", "Performed by: Adam Cease", ""], "Performed by: Music 
             Between California and Summer", ""]

temp = artists

这可以正常使用,但是,这不符合Swift 2.0的编码标准。

我想使用Array,但我不知道这是否可行?

由于

1 个答案:

答案 0 :(得分:1)

创建AnyObjects数组:

let artists: [AnyObject] = ["Performed by: Legendary Group", "Performed by: Ivan Cheong",
    "Performed by: Tien Nguyen", "", ["Performed by: DJ Happee From Channel 3.3", "Performed by: Adam Cease", ""], "Performed by: Music Between California and Summer", ""]

然后检查tableView函数中每个项目的类型并进行相应处理:

 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell {

        switch artists.indexPath {
        case is String: //handle string
        case is NSArray: //handle array
        default: //trap other stuff


        }
       }