我正在快速学习,我正在撞墙。我试图自动将字符串的组件分配给UITableView中的不同部分。
我有一个结构:
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
,但我无法弄清楚如何根据是否将细胞分配到两个不同部分之一并非isfavorite
的值设置为favorite
或notfavorite
。
我希望有人能指出我正确的方向:)
感谢您的帮助。
答案 0 :(得分: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
}
}
答案 1 :(得分: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)
修改强>
如果你得到&#34;无法调用&#39;过滤&#39;使用类型&#39;((_) - &gt; _)&#39;&#34;的参数列表,请使用这些更改编辑代码:
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
}