2015-08-23 23 views
0

我有我的这种格式的字典数据。如何将字典数据与Swift分组

var data: [[String:AnyObject]] = 

[ 
    [ 
    "id": "1", 
    "title": "A Title", 
    "Detail": "This is a String" 
    ],  
    [ 
    "id": "2", 
    "title": "A Title Again", 
    "Detail": "This is a String" 
    ], 
    [ 
    "id": "3", 
    "title": "B Title", 
    "Detail": "This is a String" 
    ], 
    [ 
    "id": "4", 
    "title": "B Title Again", 
    "Detail": "This is a String" 
    ] 
] 

没有任何人有一个想法,我怎么能组我的tableView从[A-Z]下面一样斯威夫特的原型图像。

Prototype

回答

2

这是一个两步骤的问题(我们将在纯Swift中解决)。首先,我们需要确定我们有什么部分(在这种情况下,只是AB这是相当简单:

var letters = Set<String>() 

for element in data { 
    var title = element["title"] as? String 
    let letter = title?.substringToIndex(advance(title!.startIndex, 1)) 

    letters.insert(letter!) 
} 

我们先创建一组String对象,让每个字母都代表一次。为了得到第一个字符(纯斯威夫特),我们必须使用substringToIndex,并通过使用advance一个String.Index价值。作为一个侧面说明,如果你想正常化的字母,将信投入letters之前追加.uppercaseString

print(letters)将输出[A, B]

-

其次,我们需要通过title键排序data。斯威夫特排序很简单:

data.sort { element1, element2 in 
    let title1 = element1["title"] as? String 
    let title2 = element2["title"] as? String 

    return title1 < title2 
} 

然后你可以,只要你喜欢安排数据,现在知道如何既按密钥,并检测显示哪些字母。希望这可以帮助!

+0

很多谢谢队友!这对我有效。我现在有一个小问题。如何将这些字母添加到(sectionIndexTitlesForTableView)中,以便它显示在右侧。当我'返回字母'我得到错误''设置'不可转换为'[String]'' – youngbobby

+0

不客气!你可以使用'let lettersArray:[String] = Array(letters)',并且应该修复这个错误。请考虑接受答案,如果它是有用的:) –

+0

谢谢。我仍然有一个问题:(你可以请指导我如何返回'numberOfSectionsInTableView'和'numberOfRowsInSection',因为一些奇怪的原因,我的表重复我的字典数据两次可能是从'numberOfSectionsInTableView'错误 – youngbobby

1

您希望UITableViewDataSource API。

您的图像显示的表格是带有标题和部分的普通表格视图。

您想实施的一些方法是numberOfSectionsInTableViewtitleForHeaderInSection。对于表格旁边的可滚动索引,您需要sectionIndexTitlesForTableView。所有这些方法都在上面的链接中描述。

您可能会考虑对数组进行排序并将其按字母顺序拆分,但这样做可能很昂贵,因此请勿在用户滚动时执行此操作。

+1

谢谢@Moshe,你能指导我如何对我的数组进行排序并按字母顺序分解它。我很快就是新手。请原谅我的'基本'问题。 – youngbobby

+0

NSArray上有一些方法可以帮助你。不幸的是,我不确定什么是“快速”的方法,但看看NSArray和NSPredicate类,看看它们是否可以帮助你。 – Moshe