Создайте массив из нескольких массивов в 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]
}
}