В быстрой документации объясняется цель! оператор unboxing на дополнительных типах,
var optionalString : String? = "optional"
var regularString: String = optionalString!
но они использовали его сами по определению типов (String!), без явного объяснения, которое я могу найти.
Пример:
func takesBang(value:String!) -> String {
if !value {
return "nil value, without the safe syntax"
}
return "This works"
}
var unsafe:String!
takesBang(unsafe) // yields "nil value, without the safe syntax"
Строка! тип не приводит к распаковке необязательного типа, но только, кажется, устраняет необходимость в дополнительном синтаксисе (?.). Apple использует это в своих собственных примерах, но, похоже, только отрицает дополнительные механизмы безопасности (указатели).
Может ли кто-нибудь объяснить цель/мотивацию? Это, как правило, небезопасно, поскольку вызывающему абоненту не нужно проверять или, по крайней мере, думать об их стоимости.