2015-04-20 19 views
0

我想從我的視圖控制器中分離出我的tableview邏輯,並有一個包含我的tableviews數組數據的swift文件。我現在試圖從我在我的視圖控制器中的swift文件中創建的類訪問此數組,但我不確定調用此信息並將其設置爲變量的正確方法。在下面找到我是如何稱呼它,但我收到警告,Variable 'friendsFeed' inferred to have type '()', which my be unexpected。這似乎不是正確的做法。模塊中的Swift調用數組

這裏是我的tableview邏輯,FriendsFeed.swift:

import Foundation 

public class FriendsFeedTableView { 

    var friendsDict: [String: String] = ["Username":"Mike Duff", "Bar": "Old Town Tavern"] 


    init(friendsDict: [String: String]){ 
     self.friendsDict = friendsDict 
    } 

} 

這裏是包含的tableview我的視圖控制器:

import UIKit 

class SegmentedControlViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet weak var feedTableView: UITableView! 

    @IBOutlet weak var segmentedControl: UISegmentedControl! 


    @IBOutlet weak var eventImage: UIImageView! 

    @IBOutlet weak var primaryEventLabel: UILabel! 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     feedTableView.delegate = self 

     feedTableView.dataSource = self 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    @IBAction func feedListChanged(sender: AnyObject) { 
     switch segmentedControl.selectedSegmentIndex { 
      case 0: 

       var friendsFeed = FriendsFeedTableView(friendsDict: <#[String : String]#>);) 



      println("Friends Selected") 

      case 1: 

      println("Friends in Area Selected") 

      case 2: 

      println("Top Events Selected") 

      default: 

      break 

     } 
    } 







} 
+0

不要構建'feedListChanged'視圖。相反,將它們全部構建並分配給'viewDidLoad'中的屬性並相應地設置'hidden'。 – mattt

回答

0

所以你FriendsFeedTableView應該存儲您顯示數據在你的表格視圖?它包含一個字典,它不能用作存儲表格視圖內容的數據結構。字典是無序的集合,並且表視圖要求其內容按固定順序存儲。

您可以創建具有存儲你的表視圖(數據或數組的數組的數組屬性一個單獨的類,如果你想使用多個部分的表視圖。

可以讓每個對象在你的數組中的字典,結構或自定義數據對象來存儲要顯示在你的表格視圖中的數據,如果這符合你的設計

如果你想要一個單獨的對象作爲你的表格視圖模型應該考慮讓你的對象作爲你的表視圖的數據源,UITableView的數據源方法有點奇怪,其中一種方法實際上提供了表視圖單元格,它們是vi新物體。在我看來,它模糊了模型和控制器之間的界限。

許多人(包括我自己)使用數組(或分區表視圖的數組數組)作爲模型,並將該數組存儲爲視圖控制器的屬性。在這種情況下,視圖控制器有一個模型對象,但它本身不是模型對象。

視圖控制器仍然沒有模型(數據數組)和視圖之間介導它的工作(表視圖和它的細胞。)

+0

感謝您的詳細解釋。我仍然試圖找出創建此表功能的最有效方法。感謝您讓我明白詞典不能用作存儲表格視圖內容的數據結構。現在有道理。一般來說,我有三個segemented控件用三個不同的數據源來控制表視圖。我認爲最好的做法是創建三個類來處理不同的數據。這是最好的方法嗎? – cphill

+0

最佳途徑?很難說。我會傾向於使用3個不同的數組,以及選擇數組的一些方法。你可以將你的3個表數組存儲在一個外部數組中,你可以將它們存儲在一個字典中,其中的鍵是表視圖對象:你可以使它們成爲單獨的實例變量並使用switch語句來選擇正確的... –