在Swift中使用Struct String的TableView部分

时间:2015-06-24 17:10:15

标签: swift uitableview

我正在快速学习,我正在撞墙。我试图自动将字符串的组件分配给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"]

我可以在表格视图中显示namevalue,但我无法弄清楚如何根据是否将细胞分配到两个不同部分之一并非isfavorite的值设置为favoritenotfavorite

我希望有人能指出我正确的方向:)

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我想你想在第一部分显示喜欢的项目,在第二部分显示其他项目。我不知道TestInformation中的键是什么,但事情将类似于以下代码。

假设itemsstruct 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
}