我正在创建一个NSDictionary来保存tableview的数据。 tableview就像一个联系人列表,联系人按名字分隔并按字母顺序排序,所以我正在制作一个字典来保存这些联系人。字典定义为[String: [User]]()
,其中User是我自己的对象。
但是,当我检查用户名的第一个字母是否有任何条目时,我的代码出现了编译错误:Could not find member init
。
这是我的代码:
var users = CurrentAccount.friends
var organizedUsers = [String: [User]]()
func organizeFriendsByFirstName() {
for user in users {
if let xc = organizedUsers["\(user.firstName!.substringToIndex(1))"] {
} else {
organizedUsers["\(user.firstName!.substringToIndex(1))"] = [user]
}
}
}
答案 0 :(得分:2)
你的错误与你的NSDictionary
没有任何关系,有时Swift编译器的编译错误不准确,请参阅这篇好文章Swift Compiler Diagnostics。
如果你放在行user.firstName!.substringToIndex(1)
之外,则会抛出编译错误:
无法使用类型为'(Int)'的参数列表调用'substringToIndex'。
这是导致错误的原因,您可以使用advance
函数在String
中创建索引,将您的函数更改为以下内容:
func organizeFriendsByFirstName() {
for user in users {
if let xc = organizedUsers["\(user.firstName!.substringToIndex(advance(user.firstName!.startIndex, 1)))"] {
} else {
organizedUsers["\(user.firstName!.substringToIndex(advance(user.firstName!.startIndex, 1)))"] = [user]
}
}
}
我希望这对你有所帮助。