/ / swift za pomocą wartownika i sprawdzania typu w jednym wierszu - szybkie

szybka z wykorzystaniem straży i typowania w jednej linii - szybka

Lubię używać straży i natknąłem się na sytuację, w której chcę użyć where również dla kontroli typu:

guard let status = dictionary.objectForKey("status") as! String! where status is String else { ...}

xCode narzeka poprawnie, że zawsze jest to prawda.

Moim celem jest, aby rozpakowany Sznurek znajdował się za strażnikiem w jednej linii.

Jak mogę to zrobić?

Odpowiedzi:

5 dla odpowiedzi № 1

Prawdopodobnie chcesz tego?

guard let status = dictionary["status"] as? String else {
// status does not exist or is not a String
}

// status is a non-optional String

2 dla odpowiedzi nr 2

Kiedy używasz as! String! mówisz Swift, że ty wiedzieć że obiekt w twoim słowniku musi być String. Jeśli w czasie wykonywania obiekt nie jest String, pozwalasz Swiftowi rzucić wyjątek rzucania. Właśnie dlatego where część twojego czeku nie zawiedzie: albo status będzie String, inaczej trafisz na wyjątek przed where klauzula.

Zamiast tego możesz wykonać opcjonalną obsadę, używając as? operator zamiast as!. W połączeniu z guard let, takie podejście daje

guard let status = dictionary.objectForKey("status") as? String else { ... }
... // If you reached this point, status is of type String, not String?