Ответ 1
Swift 2.0 (Xcode 7) и более поздние версии имеют новый оператор guard
, который работает как "if not let" - вы можете условно связать переменную в оставшейся части охватывающей области, сохраняя "хороший путь" в вашем коде с наименьшим отступом.
guard let type = json.type else {
XCTFail("There is no type in the root element")
}
// do something with `type` here
Ловушка заключается в том, что предложение else
для guard
должно выйти из этой области (поскольку в противном случае вы попали бы в код после этого предложения, где охраняемые переменные, такие как type
выше, являются несвязанными), Поэтому он должен заканчиваться чем-то вроде return
, break
, continue
или функцией, которая известна компилятору, чтобы никогда не возвращаться (т.е. аннотированный @noreturn
, например abort()
... Я не помню если он включает XCTFail
, но он должен (указать ошибку, если он не).
Подробнее см. Ранний выход на языке Swift.
Что касается действительно старых вещей... Там нет отрицательной формы if-let в Swift 1.x. Но поскольку вы все равно работаете с XCTest, вы можете просто протестировать необязательную часть выражения утверждения:
XCTAssert(json.type != nil, "There is no type in the root element")