2016-03-26 5 views
0

У меня есть значение в NSUserdefaults, и каждый раз, когда я запускаю код, он будет печатать «Необязательно (« значение »)« Я пробовал несколько разворачивающих приемов и много примеров в поисках , но ничего не кажется решить мою проблемуНевозможно распечатать без опции()

код

let SaveData = NSUserDefaults.standardUserDefaults() 
    if(SaveData.valueForKey("newString") != nil){ 


     print(SaveData.valueForKey("newString") as! String!) 
     print(SaveData.valueForKey("newString") as! String) 
     print(SaveData.valueForKey("newString")!) 

    // SD.executeChange("INSERT INTO \(ImageIs)Array (\(ImageIs)) VALUES ('\(abc)')") 

     SaveData.setValue(nil, forKey: "newString") 

    } 
+1

Вы пробовали ... 'if let value = SaveData.valueForKey (" newString ") как? String {print (value)} '? – nhgrif

+0

Я попробовал это сейчас и по-прежнему необязательно –

+0

Я не согласен, если вы скопировали неправильно. На самом деле, только ваш первый пример должен показывать его как необязательный ... – nhgrif

ответ

2

Таким образом, вместо того, чтобы проверить, является ли нечто nil, а затем, когда вы узнали, что это не так, вы оба сила разворачивать и сила брось, мы можем вместо тянуть это значение безопасно используя необязательное связывание и правильный метод NSUserDefaults::

if let data = NSUserDefaults.standardUserDefaults().stringForKey("newString") { 
    print(data) 
} 

Но ваш второй & третий пытается не показывать строку как опция. Эта площадка эффективно демонстрирует то же самое, что и вы здесь, с NSUserDefaults.

func optionalFunc() -> Any? { 
    return "Hello world." 
} 

print(optionalFunc()) 
/* unsafe */ print(optionalFunc() as! String!) /* unsafe */ 
/* unsafe */ print(optionalFunc() as! String) /* unsafe */ 
/* unsafe */ print(optionalFunc()!)   /* unsafe */ 

if let unwrapped = optionalFunc() as? String { 
    print(unwrapped) 
} 

![enter image description here

Как вы можете видеть, только первый случай печатает Optional("Hello world.") строку.

+0

Я исправил его! спасибо, проблема была в том, что я установил значение из текстового поля и забыл добавить! , что дало мне необязательный («Optinal (« value »)») –

+2

Вы должны *** ВСЕГДА *** * «забыть» * добавить '!'. ** ** полностью ** небезопасно, и вы в основном следующий «Неожиданно найденный нуль», ожидающий того, что это произойдет. Пожалуйста, узнайте, как правильно использовать опции. Никогда не бывает подходящего времени для принудительного разворота. *** ВЫ НЕ ЯВЛЯЕТСЯ JEDI *** – nhgrif

+0

как я могу убедиться, что текстовое поле было заполнено текстом? –

Смежные вопросы