Head First. Изучаем Swift [Джон Мэннинг] (pdf) читать постранично, страница - 97
Книга в формате pdf! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
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
дет сделано,
Когда это бу
:
нечто
Последние комментарии
1 час 46 минут назад
15 часов 40 минут назад
17 часов 13 минут назад
21 часов 6 минут назад
21 часов 11 минут назад
1 день 2 часов назад