Swift / присвоение нулю строки
Я пишу приложение, используя Parse.com .
func getContactsWithComplition(closure:() -> ())
{
contactArray=[];
if (PFUser.currentUser() != nil)
{
var realtion: PFRelation=PFUser.currentUser()["contactsOfUser"] as PFRelation;
var query: PFQuery=realtion.query() as PFQuery;
query.findObjectsInBackgroundWithBlock({ (contactsArray:[AnyObject]! , error:NSError!) -> Void in
if(error == nil)
{
for aContact in contactsArray
{
var cont=contact(phone: aContact["phoneNumber"] as String, firstName: aContact["name"] as String, lastName: aContact["familyName"] as String, adress: aContact["adress"] as String, email: aContact["email"] as String, role: aContact["role"] as String, note: aContact["note"] as String)
contactArray.append(cont)
}
closure()
}
else
{
println(error);
}
})
}
else
{
println("suck")
}
}
Когда значение одного из разделов не определено, он возвращает nil, на который нельзя ссылаться как на строку.
Как я могу решить эту проблему?
1 ответ:
Предполагая, что под разделами вы подразумеваете имя, номер телефона и т. д.
Если вы хотите заменить значение по умолчанию в случае отсутствия значения, вы можете использовать оператор nil-coalescing:
// assuming empty string is a reasonable substitute let number = aContact["phoneNumber"] as? String ?? ""
Обратите внимание на
?
, используемый сas?
- таким образом, если значение никогда не будет строкой, оно будет изящно отказывать (фактически, вы будете вынуждены использоватьas
Этот способ с Swift 1.2).Возможно, вам придется повозиться с parens, чтобы исправить приоритет
as
vs??
в зависимости от того, какая версия от Свифта ты бежишь.P. S. Если вы работаете Свифт 1.2, вы могли бы устранить некоторые дополнительные проверки ранее как:
if let user = PFUser.currentUser(), relation = user["contactsOfUser"] as? PFRelation, query = relation.query() as? PFQuery { query.findObjectsInBackgroundWithBlock { contactsArray, error in if let err = error { println(err) } else { // etc } } }