Я пытаюсь понять as
приведение типов.
Читая главу о приведении типов в документации Apple, у меня есть два синтаксиса для понижения приведения (операторы as? и as!), но я ничего не нашел о as
. Поэтому я подумал, что никогда не должен был использовать этот кинк оператора, но вчера, когда я печатал код с оператором do-try-catch
, я встретил это:
catch let error as NSError {
print(error)
}
Изначально ошибка имела тип, соответствующий Error protocol
. Теперь, используя приведение as NSError
, он стал экземпляром класса NSError
.
Но мой вопрос: что делает оператор? Конечно, это не понижение. Можно ли его использовать для «конвертирования» объекта?
ИЗМЕНИТЬ Я не думаю, что это дубликат. В моем случае переменная ошибки не является классом и не наследуется от суперкласса, поэтому у меня нет повышения. Это даже не pattern matching
. Я уже прочитал как страницу блога Swift, так и эту ветку на StackOverflow.
EDIT 2 из блога Swift
Swift 1.2 разделяет понятия гарантированного преобразования и принудительного преобразования на два отдельных оператора. Гарантированное преобразование по-прежнему выполняется с оператором as, но принудительное преобразование теперь использует as! оператор. ! предназначен для указания того, что преобразование может завершиться ошибкой. Таким образом, вы сразу узнаете, какие преобразования могут привести к сбою программы.
Приведенный выше текст не работает для меня, потому что, если я попытаюсь использовать оператор as!
вместо as
, компилятор пожалуется мне.
ИЗМЕНИТЬ 3 Даже в Использование Swift с документацией Cocoa и Obj-C используют синтаксис let-as?
для проверки и приведения к протоколу. Итак, почему в моем случае я не могу его использовать?
as
— это не оператор, а часть синтаксисаlet
-as
. - person Sergey Kalinichenko   schedule 31.12.2016as
используется для соединения типов Objective-C и типов Swift. Например.Error
иNSError
,Double
иNSNumber
и т. д. - person Alistra   schedule 31.12.2016let-as
. Я нашел это с оператором вниз (пусть как?) - person ndPPPhz   schedule 31.12.2016pattern
, этоvalue-binding-pattern
, содержащийas-pattern
. - person OOPer   schedule 01.01.2017Error
в swift, может использоваться в Objective-C, и оно преобразуется вNSError
- person Alistra   schedule 01.01.2017