2015-06-24 1 views
1

Я изучаю быстро, и я ударяю о стену. Я пытаюсь автоматически назначить компоненты строки различным разделам в UITableView.ТаблицаViewView с Struct String в Swift

У меня есть STRUCT:

struct Test { 
      var name: String? 
      var value: Float? 
      var isfavorite:String? } 

var TestInformation = [String:Test]() 

Я тогда наполненную TestInformation со значениями, так что я получаю строку, которая выглядит следующим образом: [Test(name: "Foo1", value: "1.32", isfavorite: "favorite"), Test(name: "Foo2", value: "1.27", isfavorite: "notfavorite")]

У меня есть еще один массив, в котором я поставил заголовки разделов :

let actuallyfavorited: Array<AnyObject> = ["favorite","notfavorite"] 

я могу получить name и value будет отображаться в окне просмотра таблицы штрафа, но я не могу понять, НУ t как назначить ячейку одному из двух разных разделов на основании того, установлено ли значение isfavorite равным favorite или notfavorite.

Я надеялся, что кто-то может мне точку в правильном направлении :)

Спасибо за вашу помощь.

ответ

0

Я предлагаю вам использовать только тогда, когда УСТРОЙСТВА вам нужно, и что у вас есть логический, представляющее состояние, а затем генерировать части с помощью функции для фильтрации элементов из списка. Вот простой пример:

struct Test { 
    let name:String 
    let value: Float 
    let isfavorite:Bool 
} 

func favorites(tests: [Test]) -> [Test] { 
    return tests.filter{$0.isfavorite} 
} 

func hasFavorites(tests: [Test]) -> Bool { 
    return tests.filter{$0.isfavorite}.count > 0 
} 

func nonFavorites(tests: [Test]) -> [Test] { 
    return tests.filter{!$0.isfavorite} 
} 

let testInformation = [ 
    Test(name: "Foo1", value: 1.32, isfavorite: true), 
    Test(name: "Foo2", value: 1.27, isfavorite: false)] 

let testInfoFiltered = favorites(testInformation) 

EDIT

В случае, если вы получаете "не может ссылаться на 'фильтр' со списком аргументов типа '((_) -> _)", пожалуйста, отредактируйте код с этими изменениями:

struct Test: Equatable { 
    let name:String 
    let value: Float 
    let isfavorite:Bool 
} 

func ==(lhs: Test, rhs: Test) -> Bool { 
    return lhs.name == rhs.name && lhs.value == rhs.value && lhs.isfavorite == rhs.isfavorite 
} 
+0

Привет, спасибо за ваш ответ, когда я пробую это на игровой площадке, я получаю сообщение об ошибке 'не может вызывать 'фильтр' с помощью списка аргументов типа '(_) -> _)'' для трех функций – vinceolala

+0

Странный. Это работает для меня: {name "Foo1", значение 1.32000005245209, isfavorite true} - это то, что я получаю из списка testInfoFiltered. Какие версии XCode/Swift вы используете? – Laurent

+0

Я добавил редактирование, которое, я надеюсь, решит вашу ошибку для вашей конкретной конфигурации. – Laurent

0

Я думаю, вы хотите отображать избранные предметы в первом разделе и другие предметы во втором разделе. Я не знаю, что такое ключи в TestInformation, но все будет похоже на приведенные ниже коды.

Предположим, items представляет собой массив из struct Test. кода:

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 2 // You have two sections 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    if section == 0 { 
     /* The number of items that are "favorite'" */ 
     return items.filter({$0.isfavorite == "favorite"}).count 
    } else { 
     // section 1 
     /* The number of items that are "notfavorite" */ 
     return items.filter({$0.isfavorite == "notfavorite"}).count 
    } 
    return self.ratings.count 
} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let (section, row) = (indexPath.section, indexPath.row) 
    if section == 0 { 
     .... 
     return .... // Your favorite item cell 
    } else { 
     .... 
     return .... // Your 'notfavorite' item cell 
    } 
} 
+0

Привет! Спасибо за ваш ответ. У меня возникли проблемы с пониманием этой строки: 'return items.filter ({$ 0.isfavorite ==" favorite "}). Count'. На что должны ссылаться 'items' и' filter'? – vinceolala

+1

Элементы выглядят как [Test (имя: «Foo1», значение: «1.32», isfavorite: «favorite»), Test (имя: «Foo2», значение: «1.27», isfavorite: «notfavorite»), ... ], 'items.filter ({$ 0.isfavorite ==" favorite "})' просто «фильтрует» только любимые предметы. Это также массив, который содержит только «любимые» элементы в 'items'. Поэтому все выражение означает «количество любимых предметов в' itmes' » –

+0

Спасибо, но я все равно получаю сообщение об ошибке' [String: ViewController.Test] 'не имеет члена с именем' filter ''...: ( – vinceolala