2017-01-12 22 views
2

我已經建立了一個自定義的企業對象是這樣的:讀一個自定義對象的數據來填充表視圖

class Company: NSObject { 

var companyName: String 
var companyLogo: String 
var stockPrice: String 
init(companyName:String, companyLogo:String, stockPrice:String) { 
self.companyName = companyName 
self.companyLogo = companyLogo 
self.stockPrice = stockPrice 
} 
} 

而我給每個對象這樣的性質:

func companyList() -> [Company] { 
let apple = Company(companyName: "Apple", companyLogo: "AppleLogo", stockPrice: prices[0]) 
let google = Company(companyName: "Google", companyLogo: "GoogleLogo", stockPrice: prices[1]) 
let twitter = Company(companyName: "Twitter", companyLogo: "TwitterLogo", stockPrice: prices[2]) 
let tesla = Company(companyName: "Tesla", companyLogo: "TeslaLogo", stockPrice: prices[3]) 
let samsung = Company(companyName: "Samsung", companyLogo: "SamsungLogo", stockPrice: prices[4]) 

return [apple, google, twitter, tesla, samsung] 
} 

我'想用公司對象的數據填充tableview的標籤 - 例如我想設置tableview的標籤來讀取所有的公司名稱 - 使用硬編碼的公司名稱字符串數組(例如,不是一個對象),它很容易:

cell.textLabel.text = companyNames[indexPath.row] 

現在我有一個公司對象,我該怎麼做同樣的事情?

回答

0

這聽起來像你想要將一個數組(公司)轉換爲另一個數組(公司名稱)。這是map一個良好的使用:

let companyNames = companyList().map({ $0.companyName }) 
cell.textLabel.text = companyNames[indexPath.row] 

或者,你可以只得到正確的公司第一,那麼它的名字:

cell.textLabel.text = companyList()[indexPath.row].companyName 

,並不需要中間陣列,所以我建議第二選擇。

+0

感謝康納...我嘗試了這兩種方法,並且索引超出了範圍崩潰,我不完全確定問題出在哪裏,但它可能是我的價格數組,因爲必須等待股票價格被提取。 – d0xi45

+0

這幾乎肯定是原因。如果您從某處獲取項目,則需要等待該調用完成才能加載表格。 – Connor

+0

不會將cell.textLabel.text放入股票價格獲取器的完成處理程序中嗎?我試圖做到這一點,仍然有同樣的錯誤。 – d0xi45

0

你應該考慮創建一個UITableViewCell子類,需要Company財產......

CompanyCell: UITableViewCell { 

    var company: Company { 
     didSet { 
      textLabel.txt = company.companyName 
     } 
    } 
} 
在您的視圖控制器

然後,

cell.company = companies[indexPath.row] 
0
  • 添加屬性到您的視圖控制器var companies: [Company]!
  • 填入當有關公司的新數據可用時財產companies = companyList()
  • 提示在tableView(_:numberOfRowsInSection:)行數時,返回companies.count
  • 設置tableView(_:cellForRowAt:)
  • cell.textLabel.text = companies[indexPath.row].companyName和其他值創建自定義單元格,如果有2個標籤,並和圖像默認不足以
+0

好了,我添加了視圖控制器頂部的屬性,將公司= companyList()放入viewDidLoad(這是我不確定的一步,忍受着我,我很新),將行數設置爲companies.count然後設置文本標籤。我得到一個錯誤:存儲屬性「公司」沒有初始值防止合成初始化器 – d0xi45

+0

將它添加到viewDidLoad是好的。我懷疑,在現實世界的應用程序,你會想要定期更新或從互聯網的需求,所以你將不得不添加一些其他的邏輯來適應。至於錯誤信息 - 你需要初始化init中的屬性。既然你是在viewDidLoad中初始化的,它會在init之後調用,所以它是可選的。查看更新後的答案。 – MirekE

相關問題