Создайте массив из нескольких массивов в Swift

У меня есть объект с некоторыми свойствами, массивами классов или структур

Я хочу поместить эти свойства в массив, чтобы я мог легко получить к ним доступ в TableDataSource (из-за раздела, indexpath и т. Д..)

Я пытался написать эту инициализацию

var dataStructure = Array<Any>()

    var tweet : Tweet?{
        didSet{
            dataStructure.removeAll()
            dataStructure.append(tweet?.media)
            dataStructure.append(tweet?.urls )
            dataStructure.append(tweet?.hashtags)
            dataStructure.append(tweet?.userMentions)


        }
    }

а затем получить его

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    let arr = dataStructure[section] as? NSArray

    if arr != nil{
        println(arr!)
        return arr!.count
    }else{
        return 0
    }
}

но обр всегда ноль

может потому что я кастую в NSArray? но я не могу бросить на "Массив"

media, urls, hastags и userMentions инициализируются в классе "Tweet"

public var media = [MediaItem]()
public var hashtags = [IndexedKeyword]()
public var urls = [IndexedKeyword]()
public var userMentions = [IndexedKeyword]()

так что они довольно нормальные массивы

1 ответ

Решение

В основном есть несколько проблем с вашим кодом:

1) didSet не звонит во время инициализации. Это причина dataStructure массив должен быть пустым;

2) Вы уверены, что вам нужно бросить на NSArray? Вы можете рассчитывать без этого.

3) Будет гораздо лучше использовать вычисляемое свойство в Tweet класс для получения необходимых данных.

public class Tweet {
    public var media = [MediaItem]()
    public var hashtags = [IndexedKeyword]()
    public var urls = [IndexedKeyword]()
    public var userMentions = [IndexedKeyword]()

    public var dataStructure:[Any] {
        return [media, hashtags, urls, userMentions]
    }
}
Другие вопросы по тегам