2015-11-17 2 views
3

Я недавно пытался выяснить, как инициализировать словарь в стриже, как я имел обыкновение делать в Objective-C:NSDictionary инициализация с несколькими объектами и ключами

NSMutableDictionary *loginDictionary = [[NSMutableDictionary alloc] initWithObjects:@[UsernameTextfield.text,PasswordTextfield.text] forKeys:@[@"username",@"password"]; 

я попытался записать его в Swift :

let userDictionary = NSMutableDictionary.init(object: [usernameTextField.text,passwordTextField.text], forKey: ["username","password"]) 

Но я получаю сообщение об ошибке:

Contextual type AnyObject cannot be used with array literal.

ответ

6

Прежде всего, вы должны использовать тот же метод, с objects и forKeys (обратите внимание на множественное число).

Затем вам нужно указать компилятору, что тип является каждый объект, в вашем случае это строки из факультативных текстовых меток, так что вы могли бы сделать что-то вроде этого:

if let name = usernameTextField.text as? String, let pass = passwordTextField.text as? String { 
    let userDictionary = NSMutableDictionary(objects: [name, pass], forKeys: ["username", "password"]) 
} 
+3

Вы можете (и должны) объявить NSMutableDictionary с 'let', потому что это * ссылочный тип * ... –

+0

@MartinR Спасибо, я сосредоточил свой ответ. – Moritz

0

Вы проезжаете Objects и Keys в NSMutableDictionary, как показано ниже, замените код, как показано ниже.

let userDictionary = NSMutableDictionary(objects: [usernameTextField.text,passwordTextField.text], forKeys: ["username","password"]) 
Смежные вопросы