2016-04-06 16 views
0

Kullanıcının çitin kaç metre gerektiğini belirleyebildiği bir çit şirketi için bir uygulama yazıyorum ve bu sayede panellerin, ayakların sayısını ve Bu ölçüm için gerekli olan kelepçeler, ayrıca ek kelepçeler ve ek ayaklar ekleyebilecekleri 2 alana da sahipler. Bunu yaptıklarında, ekstraları dahil etmek için daha önce hesapladıkları değerleri otomatik olarak günceller.Metnin silinmesi "İstenmeyen bir değer çıkarılırken beklenmedik bir şekilde sıfır bulundu"

Metin alanı her zaman içinde bir sayıya sahip olduğu sürece bu iyi çalışır, örneğin, ilk kutuya 30m girerseniz, uygulama 3 ayağa koymanız gerekirse, 31 feet'e ihtiyacınız varsa çalışır Eğer o zaman fikrimi değiştirir ve finding nil while unwrapping an optional value nedeniyle app çöküyor ekstra ayaklar alanın içeriğini silmek eğer, 34 feet diyor, bu etrafında alabilirsiniz bir yolu var mı?

Aşağıdaki kod var:

@IBAction func AdditionalFeetField(sender: AnyObject) { 
    if AdditionalFeetField.text != nil { 
     let AdditionalFeetValue1 = Double(PanelQtyField.text!); 
     let AdditionsFeetValue2 = Double(AdditionalFeetField.text!); 
     let AdditionalFeetResult = (AdditionalFeetValue1! + AdditionsFeetValue2!) + 1 
     self.FeetQtyLabel.text = "\(AdditionalFeetResult)" 
    } 
} 

`

+0

http://stackoverflow.com/questions/30315723/check-if-string-is-a-valid-double-value-in-swift - en iyi yanıt, dizenin sayısal olduğunu kontrol etmenin harika bir yoludur. bir çift için sabitlenebilir. 'Textfield.text' öğenizin sıfır olmadığından emin olun. – Mattias

+2

Hiçbir zaman isteğe bağlı olarak paketini açmaya zorlamayın. Sadece bir kaza mı istiyorsun? Lütfen [onlarla düzgün bir şekilde nasıl başa çıkacağınızı öğrenin.] (Http://stackoverflow.com/a/36360605/2976878) – Hamish

cevap

1

size derleyiciye söylemek anlamına bu durumda metin alanlarının değerlerini unwrapping kuvvet ! kullanıyoruz" Sadece bana metin alanının değerini ver, nil olsun ya da olmasın umurumda değil. Bu hemen hemen her zaman kötü bir fikirdir ... Eğer

daha iyi bir yol değerlerini unwrap if let veya guard kullanmaktır :-) öğrendim olarak. Denedim

sizin işlevi if let

@IBAction func AdditionalFeetField(sender: AnyObject) { 
    if let additionalFeetStringValue = AdditionalFeetField.text, 
     let panelQtyFieldStringValue = PanelQtyField.text { 
     let additionalFeetValue1 = Double(panelQtyFieldStringValue) ?? 0 
     let additionsFeetValue2 = Double(additionalFeetStringValue) ?? 0 
     let additionalFeetResult = (additionalFeetValue1 + additionsFeetValue2) + 1 
     FeetQtyLabel.text = "\(AdditionalFeetResult)" 
    } 
} 

kullanmak güncellemek için yardımcı olur

Umut (ben de :-) senin noktalı virgül ve self referansları silme cüretini). Belki de, değerin bir çifte basılabileceğini kontrol etmek için @mattias öneri ile birleştirebilirsiniz.

+0

Nane çalıştı! teşekkür ederim! – DanielPetters386

İlgili konular