Использование Xcode 7 бета, Swift 2.0Избавиться от этих факультативных значений
Я спасаю и погрузочные учетные данные для брелка, так или иначе при загрузке я получаю «факультативный (значение)» назад, это выглядит, как это на самом деле часть строки, поскольку она также отображается так в текстовом поле или при отправке в API
Вот как я сохраняю и загружаю учетные данные сейчас, как вы видите, я сделал много лишних проверок, чтобы убедиться, что это не является нулевым или необязательным, это действительно чрезмерное использование пояснительных знаков ...
func SaveCredentials(credentials : [String : String!]!) -> Bool
{
if(credentials.count == 2)
{
//only proceed when we have two keys: username and password
let username = credentials["username"]
let password = credentials["password"]
if let usernameStr = username
{//also tried username!=nil && password != nil
if let passwordStr = password
{ //usernameStr and passwordStr is of type String!
let NsDataUsername = usernameStr!.dataUsingEncoding(NSUTF8StringEncoding)
let NsDataPassword = passwordStr!.dataUsingEncoding(NSUTF8StringEncoding)
if(NsDataUsername != nil && NsDataPassword != nil)
{
LocalStorage.saveToKeyChain("username", data: NsDataUsername!)
LocalStorage.saveToKeyChain("password", data: NsDataPassword!)
return true
}
}
}
}
return false
}
func LoadCredentials() -> [String : String!]?
{
let NsDataUsername = LocalStorage.loadFromKeyChain("username")
let NsDataPassword = LocalStorage.loadFromKeyChain("password")
if(NsDataUsername != nil && NsDataPassword != nil)
{
let username : String! = String(NSString(data: NsDataUsername!, encoding: NSUTF8StringEncoding))
let password : String! = String(NSString(data: NsDataPassword!, encoding: NSUTF8StringEncoding))
if let usernameStr = username
{
if let passwordStr = password
{ // password is of type String!, passwordStr is of type String
var credentials : [String: String!] = [String : String]()
credentials["username"] = usernameStr
credentials["password"] = passwordStr
return credentials
}
}
}
return nil
}
И когда я отправляю Api, это мой метод, который также требует необязательной строки. Этот метод действительно работает при входе в систему, получая строки из текстовых полей, но не отфильтровывая это Необязательно при приходе из брелка.
func LoginUser(email : String!, password : String!)
{
print("LoginUser(email : \(email), password: \(password))")
var parameters = [String : AnyObject]()
parameters["UserName"] = email
parameters["Password"] = password
......
Строки, которые я посылаю к методу SaveCredentials, те же, что пользователь вошел в систему с:
func LoginLocalAccount(email : String!, password : String!)
{
databaseAPI.LoginUser(email!, password: password!) //login goes just fine
saveCredentials(email!, password: password!) //manages to get Optional in it..
}
Я подозреваю, что это что-то делать с сохранением и загрузкой от брелка, для интересов , this - это то, что я использую для сохранения и загрузки с брелка.
Я хочу избавиться от них, потому что, когда приложение запускается, оно загружает учетные данные и пытается войти в мой API. Конечно, я получаю сообщение об ошибке, что имя пользователя не является действительным адресом электронной почты, поскольку оно является необязательным ([email protected])
Во-первых, это ** НЕ ** не опциональным , Они являются неявно развернутыми опциями (которые, безусловно, являются опциями, которые могут определенно быть «nil»). Во-вторых, просто потому, что 'Необязательный ([email protected])' * prints * с функцией 'print' делает * not * означает, что он отображается в другом месте. – nhgrif
Но это проблема, даже если я снова показываю их в текстовом поле, он показывает необязательный – CularBytes
. Тогда это фактическое значение в строке. – nhgrif