Ios 斯威夫特:找不到我的NSDictionary的成员init

Ios 斯威夫特:找不到我的NSDictionary的成员init,ios,swift,nsdictionary,Ios,Swift,Nsdictionary,我正在制作一个NSDictionary来保存tableview的数据。tableview就像一个联系人列表,联系人由名字分隔,并按字母顺序排列,所以我正在制作一个字典来保存这些联系人。字典定义为[String:[User]](),其中User是我自己的对象 但是,当我检查用户名中的第一个字母是否有任何条目时,我得到编译错误:无法在我的代码中找到成员init 这是我的密码: var users = CurrentAccount.friends var organizedUsers = [Strin

我正在制作一个NSDictionary来保存tableview的数据。tableview就像一个联系人列表,联系人由名字分隔,并按字母顺序排列,所以我正在制作一个字典来保存这些联系人。字典定义为
[String:[User]]()
,其中User是我自己的对象

但是,当我检查用户名中的第一个字母是否有任何条目时,我得到编译错误:
无法在我的代码中找到成员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]
        }
    }
}

您的错误与您的
NSDictionary
没有任何关系,有时Swift编译器的编译错误并不准确,请参阅这篇漂亮的文章

如果你把
user.firstName!放在行外!。substringToIndex(1)
这会引发编译错误:

无法使用类型为“(Int)”的参数列表调用“substringToIndex”

这是导致错误的原因,您可以使用该函数在
字符串中创建索引,将函数更改为以下内容:

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]
        }
    }
}

希望这对您有所帮助。

String是名字吗?或者它是第一个字母,包含一个以该字母开头的用户数组?我之所以这样问,是因为我认为您正在尝试为UITableView编制索引,并在右侧滚动显示小写字母fast@JonathanAllenGrant不客气,如果asnwer解决了您的问题,请接受它以帮助其他人。