Swift Academy · Урок

Приведение типов: is, as?, as! и as

Безопасно проверяйте и преобразовывайте типы с помощью операторов приведения Swift.

Урок 3 из 413 шагов

«Приведение типов: is, as?, as! и as» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Что такое приведение типов

Приведение типов позволяет проверить экземпляр или преобразовать его в другой класс из той же иерархии.

class Animal { var name: String = "Animal" }
class Dog: Animal { func bark() { print("Woof") } }
let a: Animal = Dog()
print(a.name)

Оператор `is`

Используйте is, чтобы проверить, является ли экземпляр экземпляром определённого подкласса.

let a: Animal = Dog()
if a is Dog {
  print("It's a dog")
}

Приведение вниз с помощью `as?`

as? пытается выполнить приведение к подклассу и возвращает необязательное значение. Если приведение не удалось, результатом будет nil.

let a: Animal = Dog()
if let dog = a as? Dog {
  dog.bark()
} else {
  print("Not a dog")
}

Принудительное приведение с помощью `as!`

as! принудительно приводит значение к подтипу. Используйте его только при полной уверенности в типе: при ошибке приложение аварийно завершается.

let a: Animal = Dog()
let dog = a as! Dog
dog.bark()

Приведение вверх с помощью `as`

Приведение от подкласса к суперклассу всегда выполняется успешно и использует as.

let dog = Dog()
let animal = dog as Animal
print(animal.name)

Приведение типов в коллекциях

Массивы смешанных типов, объявленные как [Any], требуют приведения типов для использования конкретного поведения.

let items: [Any] = [1, "hello", Dog()]
for item in items {
  if let d = item as? Dog { d.bark() }
  if let s = item as? String { print(s) }
}

Приведение типов с помощью AnyObject

AnyObject представляет экземпляр любого класса. Используйте as?, чтобы получить конкретный тип.

let objs: [AnyObject] = [Dog(), Dog()]
for obj in objs {
  if let d = obj as? Dog { d.bark() }
}

Приведение типов протоколов

Между типами протоколов и конкретными типами можно выполнять приведение с помощью тех же операторов.

protocol Runnable { func run() }
class Cat: Animal, Runnable { func run() { print("Cat runs") } }
let r: Runnable = Cat()
if let cat = r as? Cat { print(cat.name) }

Сопоставление с образцом с помощью `is` в switch

Оператор switch в Swift может сопоставлять тип с помощью образца is.

let value: Any = 42
switch value {
case is Int: print("Integer")
case is String: print("String")
default: print("Other")
}

Образцы `as?` в switch

Объедините switch с конструкцией let x as Type, чтобы за один шаг проверить тип и связать значение с переменной.

let value: Any = "Swift"
switch value {
case let s as String: print("String: \(s)")
case let i as Int: print("Int: \(i)")
default: break
}

Рекомендации по безопасному приведению

Всегда предпочитайте as? оператору as!, чтобы избежать сбоев во время выполнения в рабочем коде.

func describe(_ obj: AnyObject) {
  if let dog = obj as? Dog { dog.bark(); return }
  print("Unknown type")
}

Быстрая проверка

Какой оператор возвращает необязательное значение при приведении к подклассу?

Повторение урока

Приведение типов в Swift: is проверяет тип, as? безопасно приводит к подклассу и возвращает необязательное значение, as! выполняет принудительное приведение к подклассу, а as — приведение к суперклассу. В рабочем коде предпочитайте as?.

Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Приведение типов: is, as?, as! и as» бесплатный?

Да — полный текст урока «Приведение типов: is, as?, as! и as» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Приведение типов: is, as?, as! и as»?

Безопасно проверяйте и преобразовывайте типы с помощью операторов приведения Swift. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Приведение типов: is, as?, as! и as»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Наследование классов и ключевое слово super
  2. override, final и запрет наследования
  3. Приведение типов: is, as?, as! и as
  4. Деинциализаторы и жизненный цикл памяти
← Назад к Swift Academy