2015-03-20 3 views
2

Я пишу приложение, используя Parse.com.Swift | присваивая nil строке

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") 
    } 
} 

Когда значение одной из секций не определен, он возвращает ноль, что не может ссылаться в качестве строки.
Как это можно решить?

ответ

2

Предполагая отрезками вы имеете в виду имя, номер телефона и т.д.

Если вы хотите, чтобы заменить значение по умолчанию в случае отсутствия значения настоящего, вы можете использовать оператор ноль-коалесцирующий:

// assuming empty string is a reasonable substitute 
let number = aContact["phoneNumber"] as? String ?? "" 

Обратите внимание на то, что ? используется с as? - таким образом, если значение никогда не является строкой, оно изящно потерпит неудачу (на самом деле вы будете вынуждены использовать as таким образом, как и для Swift 1.2).

Возможно, вам придется поиграть с парсерами, чтобы исправить приоритет as против ?? в зависимости от того, какая версия Swift вы используете.

P.S. если вы работаете Swift 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 
     } 
    } 
} 
+0

Большое спасибо, я только начал изучать быстры несколько дней назад, я просто пытаюсь написать код без используя любую документацию, чтобы увидеть, насколько это легко для меня, я позже узнаю полную докоментацию –