2016-03-26 21 views
0

NSUserdefault'ta bir değere sahibim ve kodu her çalıştırdığımda "İsteğe bağlı (" değer ")" aramaları iptal ettim ve birçok örnekte aramalar yaptım. Opsiyonel() olmadan yazdırılamıyor()

benim sorunum kodunu

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

Denediniz mi ... Eğer değer = SaveData.valueForKey ("newString")? Dize {print (value)} '? – nhgrif

+0

Şimdi denedim ve hala isteğe bağlı –

+0

Yanlış kopyalanmadıkça katılmıyorum. Aslında, sadece ilk örneğiniz onu isteğe bağlı olarak göstermelidir ... – nhgrif

cevap

2

çözmek Yani, bir şey bunun kuvvet unwrap ve kuvvet hem de dökme Eğer, bunun yerine bu değeri indirebiliriz, değil öğrenince sonra nil olup olmadığı ve kontrol ziyade İsteğe bağlı ciltleme ve doğru NSUserDefaults yöntemini kullanarak güvenle dışarı: stringForKey(_:):

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

Ama ikinci & üçüncü çalışır opsiyonel olarak dize gösteren edilmemelidir. Bu oyun alanı, NSUserDefaults ile burada yaptığınız şeyle tam olarak aynı şeyi gösterir. Gördüğünüz gibi

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

, sadece ilk harf Optional("Hello world.") dize yazdırır.

+0

düzelttim! teşekkür ederim, sorun bir metin kutusundan değeri ayarladım ve eklemeyi unuttum! , bana bir Seçmeli ("Optimal" ("value") ") verdi –

+2

*** *** *" unutma "* *** 'yi eklemek için ***. Bu ** tamamen ** güvensiz ve temelde bir sonraki "Beklenmedik bulunmuş sıfır" sorusu olmanız bekleniyor. Lütfen isteğe bağlı olanları nasıl kullanacağınızı öğrenin. Dökme veya zorlamayı zorlamak için asla uygun bir zaman yoktur. *** Bir JEDI DEĞİLDİR *** – nhgrif

+0

Metin kutusunun metinle doldurulduğundan nasıl emin olabilirim? –

İlgili konular