/ Align = "left" / "(znak zapytania) i"!"(wykrzyknik)

Rozumiem, że w Swift wszystkie zmienne muszą być ustawione z wartością, i że za pomocą opcji możemy ustawić zmienną, która ma być ustawiona na nil początkowo.

Nie rozumiem, co robi ustawienie zmiennej z !, ponieważ miałem wrażenie, że to "rozpakowuje" wartość z opcji. Myślałem, że robiąc to, gwarantujesz, że jest wartość do rozpakowania w tej zmiennej, dlatego na IBActions i takie widzisz go używane.

Tak po prostu, do czego jest inicjalizowana zmienna, gdy robisz coś takiego:

var aShape : CAShapeLayer!

I dlaczego/kiedy miałbym to zrobić?

Author: Luca Angeletti, 2014-06-09

1 answers

W deklaracji typu {[2] } jest podobna do ?. Oba są opcjonalne, ale ! jest opcjonalnym "domyślnie rozpakowanym" , co oznacza, że nie musisz go rozpakowywać, aby uzyskać dostęp do wartości (ale nadal może być zerowa).

Jest to w zasadzie zachowanie, które mieliśmy już w objective-c. wartość Może być zerowa, i musisz to sprawdzić, ale możesz również uzyskać dostęp bezpośrednio do wartości, tak jakby nie była to opcja (z ważną różnicą, że jeśli nie sprawdź, czy nie pojawi się błąd runtime)

// Cannot be nil
var x: Int = 1

// The type here is not "Int", it's "Optional Int"
var y: Int? = 2

// The type here is "Implicitly Unwrapped Optional Int"
var z: Int! = 3

Użycie:

// you can add x and z
x + z == 4

// ...but not x and y, because y needs to be unwrapped
x + y // error

// to add x and y you need to do:
x + y!

// but you *should* do this:
if let y_val = y {
    x + y_val
}
 131
Author: Jiaaro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-06 14:00:36