Swift многое изменил с помощью Xcode 6.3. Мне пришлось заменить десятки мест в каждом из моих приложений. as
->as!
. Почему, какие сейчас правила?as! vs как оператор в Xcode 6.3 в Swift
ответ
До Swift 1.2, оператор as
может быть использован для выполнения двух различных видов конверсии, в зависимости от типа выражения преобразуется и тип он преобразуется в:
Гарантированное преобразование значения одного типа другому, успех которого может быть проверен компилятором Swift. Например, повышение (например, преобразование из класса в один из его суперклассов) или указание типа литерального выражения (например, 1 как Float).
Принудительное преобразование одного значения другому, безопасность которого не может быть гарантирована компилятором Swift и может вызвать ловушку времени выполнения. Например, downcasting, преобразование из класса в один из его подклассов.
Swift 1.2 разделяет понятия гарантированного преобразования и принудительного преобразования на два разных оператора. Гарантированное преобразование все еще выполняется с оператором as
, но принудительное преобразование теперь использует оператор as!
. Значение !
означает, что преобразование может завершиться неудачей. Таким образом, вы сразу знаете, какие преобразования могут привести к сбою программы.
Согласно release notes:
Понятия гарантированного преобразования и «принудительный failable» преобразование теперь разделены на два оператора. Принудительное отказоустойчивое преобразование теперь использует как! оператор. ! дает понять читателям кода, что может произойти сбой и привести к ошибке выполнения. Оператор «as» остается для upcasts (например, «someDerivedValue as Base») и введите аннотации («0 как Int8»), которые гарантированно не сработают.
Практическое отличие заключается в следующем:
var optionalString = dict.objectForKey("SomeKey") as? String
optionalString
будет переменная типа String?
. Если базовый тип - это нечто иное, чем String
, это безвредно назначает nil
необязательному.
var optionalString = dict.objectForKey("SomeKey") as! String?
Это говорит, я знаю, эта вещь String?
. Это также приведет к тому, что optionalString
будет иметь тип String?
, но он сработает, если базовый тип - это что-то еще.
Первый стиль затем используется с if let
безопасно разворачивать опциональный:
if let string = dict.objectForKey("SomeKey") as? String {
// If I get here, I know that "SomeKey" is a valid key in the dictionary, I correctly
// identified the type as String, and the value is now unwrapped and ready to use. In
// this case "string" has the type "String".
println(string)
}
Пожалуйста, не копируйте ответы других. Если вы считаете, что он отвечает на вопрос, разместите ссылку в комментарии. http://stackoverflow.com/a/25710162/1630618 – vacawama
- 1. Xcode 6.3 Swift Autocompletion
- 2. XCode 6.3 Swift конвертируемая ошибка
- 3. Xcode 6.3 и Swift 1.1
- 4. Swift 1.2 (Xcode 6.3) удален оператор xor '^' для значения Bool?
- 5. вопросы компилятора с Swift 1.2/Xcode 6.3
- 6. Значение как! в Swift 1.2 - Xcode 6.3 beta
- 7. Как исправить эту ошибку в xcode 6.3 ios 8.3 Swift?
- 8. Возможно ли Xcode 6.3 с Swift 1.0?
- 9. Анализировать и Swift Xcode 6.3 Вопрос
- 10. BreakPoints Не работают в Swift в Xcode 6.3
- 11. Конфликт между MapKit в Swift 2/Xcode 7.2 и Swift 1.2/Xcode 6.3
- 12. Обновление NSView в последней версии Swift (Xcode 6.3)
- 13. JSQMessagesViewController в Swift с Xcode 6.3 Objective-C Selector issue
- 14. Интеграция проекта Cocos2dx в Swift Project (XCode 6.3)
- 15. Лексическая проблема в xcode 6.3
- 16. UITableViewAutomaticDimension не работает в Xcode 6.3
- 17. addAttribute не работает в Swift 1.2 (Xcode 6.3)
- 18. imagePickerController, поврежденный в Xcode 6.3
- 19. Xcode 6.3 завершение кода слишком медленно
- 20. Как оператор в Swift
- 21. Как создать такой вид с помощью Xcode 6.3 swift
- 22. XCode 6.3 добавление полей в tableviewcell
- 23. Как использовать MapKit View в Xcode 6.3?
- 24. Xcode 6.3 показывает непоследовательные ошибки
- 25. Ориентация раскадровки Xcode 6.3
- 26. WatchKit XCODE 6.3 ISSUE
- 27. Google Analytics не работает с Swift 1.2 и Xcode 6.3
- 28. XCode 6.3 MKPointAnnotation setCoordinate missing
- 29. Расширения клавиатуры Xcode 6.3?
- 30. Xcode 6.3 warning
Документально в примечаниях к выпуску Xcode 6.3 и в Swift блоге: https://developer.apple.com/swift/blog /? ID = 23. –
... также в онлайн-документации: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html # // apple_ref/doc/uid/TP40014097-CH22-ID338 или в предыдущих SO-вопросах: http://stackoverflow.com/questions/29637974/ скор-типажи-в-1-2. –