2015-04-28 76 views
2

陣列我有一個對象與一些禮節,的類或結構創建多個陣列的在夫特

我希望把那些禮儀在陣列中,所以我可以在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 
    } 
} 

但arr始終爲零

也許是因爲我鑄造到NSArray?但我不能轉換爲「陣列」

媒體,網址,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] 
    } 
} 
+0

2)如何?從dataStructure中選擇一個項目:[Any]將返回一個Any類型的項目,但它沒有該方法.count 3)不錯的建議:) –

+0

是的,你是對的2)。其實你需要從客觀的c風格的代碼切換你的想法。 Swift是嚴格的類型語言,obj-c方式會給你帶來問題。我建議你將所有的自定義類型轉換爲一些協議並使用這個協議。 –

+0

從未使用obj :) 我會盡力找出一些東西:) –