У меня есть определение метода в быстром проекте:
class func fireGetRequest(urlString: String!, username: String?, password: String?, completionBlock:(NSDictionary)->Void) {
//check if user passed nil userName
if username == nil || password == nil {
// retrieve userName, password from keychain
// here we have OR check since we have single value from pair it is of no use and can be considered as corrupted data
// so it is better to retrieve stable data from keychain for further processing
let (dataDict, error) = Locksmith.loadDataForUserAccount(kKeychainUserAccountName)
// no error found :)
// use data retrieved
if error == nil {
username = dataDict[kKeychainUserNameKey]
password = dataDict[kKeychainUserPwdKey]
}
}
// do something with username, password
}
Здесь я делаю следующие вещи:
- Проверка, является ли какое-либо имя пользователя, пароль нулевым или нет
- Если какое-либо из них равно нулю, то попытка установить соответствующие значения из словаря
Проблема в том, что я не знаю, как решить следующие ошибки:
Аналогичный метод в target-c работает отлично:
+ (void)fireGetRequestWithUrlString:(NSString *)urlString userName:(NSString *)username userPwd:(NSString *)password{
NSDictionary *dataDict = @{kKeychainUserNameKey: @"Some user name", kKeychainUserPwdKey: @"Some password"};
if (!username || !password) {
username = dataDict[kKeychainUserNameKey];
password = dataDict[kKeychainUserPwdKey];
}
// do something with username, password
}
Любые идеи?
Обновление 1:
Как было предложено в ответах, я объявил параметры функции - имя пользователя и пароль как var, но затем начал получать следующие ошибки компиляции:
Чтобы решить эту проблему, я набрал кастинг, но снова другая ошибка:
При принудительном понижении ниже ошибка:
Все равно непонятно :(
Наконец-то решено :)
if let dataDictionary = dataDict {
username = dataDictionary[kKeychainUserNameKey] as! String?
password = dataDictionary[kKeychainUserPwdKey] as! String?
}