2017-01-12 4 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] 
} 

I Я бы хотел заполнить метки табличного представления данными объекта Company - например, я хочу, чтобы метки табличного представления отображали все названия компаний - с жестко запрограммированным массивом строк названия компании (т. е. не как объект), это так же просто, как :

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

спасибо Connor ... Я попробовал оба из них и получил индекс из диапазона сбоев, я не совсем уверен, где эта проблема, но это может быть мой массив цен, так как это должно ждать, когда цены на акции будут получены. – 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
  • установить cell.textLabel.text = companies[indexPath.row].companyName и другие значения в tableView(_:cellForRowAt:)
  • создать пользовательскую ячейку, если по умолчанию с 2 этикетки и и изображения не хватает
+0

Итак, я добавил свойство в верхней части диспетчера представлений, положил company = companyList() внутри viewDidLoad (это тот шаг, о котором я не уверен, нести со мной, я довольно новый), установите количество строк в company.count, а затем установите текстовые метки. Я получил ошибку: сохраненное свойство «компании» без начального значения предотвращает синтезированные инициализаторы – d0xi45

+0

Добавление его в viewDidLoad в порядке. Я подозреваю, что в приложении реального мира вы захотите периодически обновлять его или по требованию из Интернета, поэтому вам придется добавить другую логику для этого. Что касается сообщения об ошибке - вам нужно инициализировать свойство в init.Поскольку вы инициализируете его в viewDidLoad, который вызывается позже init, сделайте его необязательным. См. Обновленный ответ. – MirekE

Смежные вопросы