2015-08-12 6 views
2

Я делаю NSDictionary для хранения данных для таблицы. Табличное представление похоже на список контактов, с контактами, разделенными по имени и отсортированными в алфавитном порядке, поэтому я делаю словарь для хранения этих контактов. Словарь определяется как [String: [User]](), где User - это мой собственный объект.Swift: Не удалось найти элемент init для моего NSDictionary

Однако, когда я проверяю, есть ли записи для первой буквы по имени пользователя, я получаю ошибку компиляции: 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

Строка - это имя? или это первое письмо с массивом пользователей, чьи имена начинаются с этой буквы? Я спрашиваю, потому что я думаю, что вы пытаетесь индексировать UITableView с маленькими буквами справа, чтобы быстро прокручивать – dGambit

ответ

2

Вы ошибку не имеет ничего общего с NSDictionary, иногда Swift компилятор это не точно с его ошибками компиляции, увидеть эту замечательную статью Swift Compiler Diagnostics.

Если поставить вне линии user.firstName!.substringToIndex(1) это бросает ошибку компиляции:

Cannot invoke 'substringToIndex' with an argument list of type '(Int)'.

И это является причиной вашей ошибки, вы можете использовать функцию 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] 
     } 
    } 
} 

Надеюсь, это поможет вам.

+0

Большое вам спасибо! –

+0

@JonathanAllenGrant приветствую вас, если asnwer решит ваш вопрос, пожалуйста, примите его, чтобы помочь кому-то другому. –

Смежные вопросы