Head First. Изучаем Swift [Джон Мэннинг] (pdf) читать постранично, страница - 97

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

mySecondLink?.absoluteString

print("The first link is: \(firstLinkString!)")

print("The second link is: \(secondLinkString!)")

дальше 4  389

изображения в интернете

AsyncImage с наворотами
Иногда при загрузке графики из интернета требуется проявить чуть больше фантазии, вывести на экран
симпатичный индикатор прогресса, который отражает ход загрузки, и в конечном итоге заменить его
этим изображением.

Примерно так:
Пока изображение загружается, на экране
отображается круговой индикатор...

После завершения загрузки заменяется
изображением.

Это делается так:
struct ContentView: View {
var body: some View {
VStack {

Когда AsyncImage завершит загрузку изображения, оно
помещается в image. Здесь image — элемент SwiftUI
Image, с которым вы уже умеете работать.

AsyncImage(url: URL(string: "https://cataas.com/cat?type=square")) { image in
image.resizable()

} placeholder: {

ProgressView — удобное представление SwiftUI, которое отображает круговой индикатор с бесконечной
.frame(width: 300, height: 300) анимацией. Чтобы он исчез с экрана, вы должны явно
убрать его. Без этого он так и будет крутиться
бесконечно.
}

}

}

}

ProgressView()

Здесь можно просто применить модификатор .resizable(),
потому что в этой точке это просто обычное изображение.

элеменПри желании ProgressView() можно заменить чем-то другим, например
аться
отображ
будет
ии,
замыкан
в
ся
находит
что
Все,
).
loading!”
age
том Text(“Im
на экране, пока AsyncImage не завершит загрузку изображения.

390 глава 12

приложения, веб-программирование и все такое

Упражнение
 згляните на приведенный ниже код. Это еще более навороченная версия того, что вы уже на­
В
учились строить. В коде остались пропуски, и мы хотим, чтобы вы их заполнили.
struct ContentView: View {
var imageURL = URL(string: "https://cataas.com//cat?type=square")

AsyncImage может работать с замыканием, получающим экземпляр AsyncImagePhase, который
представляет состояние загрузки изображения.

var body: some View {
VStack {

AsyncImage(url: imageURL) { phase in

Выбираем по
значению phase...

switch phase {

case .empty:

Это означает,
что изображение все еще
case
.success(let image):
загружается.

А это означает,
что загрузка
case
.failure:
завершилась
неудачей.

}

}

}

Здесь выводится изображение
через SF Symbols. Мы рекомендуем использовать shippingbox,
но никто не запрещает вам
проявить фантазию.

default:

}

Этот синтаксис связывает значение
(ассоциированное с перечислением, из
которого берется .success) с константой, которой присвоено имя image.
Это позволяет нам получить image.
Здесь используется image:
изображение отображается
с модификатором .resizable()
и подгоняется по размерам представления во фрейме 300x300.

В этом случае получаем изображение.

И если происходит
что-то непредвиденное, получаем
EmptyView.
}

Здесь необходимо поместить элемент
ProgressView, который должен отображаться
во время загрузки. В ProgressView можно поместить текст: ProgressView(“Like this...”)

EmptyView()

EmptyView — представление SwiftUI, которое вообще
ничего не содержит. Оно полезно в ситуациях, когда вам
понадобится действительно пустое представление.

.empty
.success

.failure

Ответ на с. 393.
дальше 4  391

упражнение swift

Возьмите в руку карандаш
Решение

С. 388

struct ContentView: View {
var body: some View {
VStack {

Image("argos")

.resizable()

.frame(width: 300, height: 300)

.aspectRatio(contentMode: .fill)
.border(Color.green, width: 3.0)

Spacer()

Image("apollo")

.resizable()

.aspectRatio(contentMode: .fit)

}

}

}

.clipShape(Capsule())

Говорят, на Swift можно строить
веб-сайты. Как это делать? Я уже
вполне уверенно освоилась со Swift,
но не знаю, как создать веб-сайт...

Пришло время познакомиться с Vapor (пусть и ненадолго).
Vapor — выразительный, управляемый событиями, протокольно-ориентированный фреймворк веб-разработки, написанный на Swift и для Swift. Он
предоставляет все необходимое для построения современных веб-служб
и веб-сайтов с использованием Swift.
Vapor не является проектом Apple; это часть энергичного сообщества
Swift-разработки с открытым кодом.
392 глава 12

приложения, веб-программирование и все такое

Упражнение
Решение

С. 391

struct ContentView: View {
var imageURL = URL(string: "https://cataas.com//cat?type=square")
var body: some View {
VStack {

AsyncImage(url: imageURL) { phase in
switch phase {

case .empty:

ProgressView("Loading cat...")

case .success(let image):

image.resizable()

.aspectRatio(contentMode: .fit)

.frame(maxWidth: 300, maxHeight: 300)

case .failure:

Image(systemName: "shippingbox")

default:

}

}

}

}

}

.empty

EmptyView()

.success

.failure

дальше 4  393

настройки vapor

Vapor: веб-фреймворк для Swift
Предполагается, что фреймворк Vapor уже установлен на вашей машине. Чтобы
получить проект Xcode, с которым вы можете работать, выполните процесс из
трех шагов.
Установка Vapor здесь не рассматривается, потому что это
довольно хлопотное дело, но за первыми инструкциями обращайтесь на сайт https://vapor.codes в вашем веб-браузере.

1

Новый проект Vapor можно создать следующей командой:
vapor new mysite -n

2

дет сделано,
Когда это бу
:
нечто