[Swift] Dlaczego text z labela nie chce pobrać się do zmiennej


(MrGalek) #1

Witam
mam taki problem że kiedy chce dane z labela pobrać do zmiennej Double to program twierdzi że mam nulla, przynajmniej tak to rozumiem, kiedy daje do stringa to jest okej.

numA = Double(solve.text!)!

nie wiem czemu to nie działa, zmienne są zdefiniowane w taki sposób:
@IBOutlet weak var solve: UILabel!
var numA: Double = 0.0

thread 1: fatal error: unexpectedly found nil while unwrapping an optional value

a błąd to:

Z góry dzięki !

PS: Dopiero zaczynam przygodę z Swiftem, może mi ktoś powiedzieć ocb dokładnie z tymi wykrzyknikami ?


(Fizyda) #2

Ty zaczynasz przygodę ze Swiftem, a ja na oczy kodu napisanego w tym języku nie widziałem jak również Objective-C. W ogóle nigdy nie napisałem ani 1 linijki kodu na Maca.
Jednak udało mi się w ciągu 2 minut znaleźć przyczynę Twojego problemu.

Do sedna, tutaj masz opisane w czym problem: https://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found-nil-while-unwrapping-an-optional-valu. W skrócie, źle zadeklarowałeś zmienną solve, fakt może być ona opcjonalna czyli niekoniecznie zbindowana, a co za tym idzie, jak może jest, a może jej nie być to możesz otrzymać nil czyli nic. Więcej możesz przeczytać sobie tutaj: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID330 albo tutaj: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html
Lecz ty unwrapujesz ją dwa razy, raz automatycznie przy deklaracji, drugi raz przy pobieraniu zawartości. Możesz zerknąć jeszcze tutaj: https://stackoverflow.com/questions/24034483/what-is-an-unwrapped-value-in-swift