MOBILEPROGLIB Telegram 6201
5 SwiftUI-хаков для более чистых приложений

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

1️⃣ Более безопасный способ развертывания Optional в представлениях

Вместо бесконечных операторов if let создайте простое расширение, которое сделает обработку опциональных параметров естественной:

extension View {
@ViewBuilder
func ifLet<T, Content: View>(_ value: T?, content: (T) -> Content) -> some View {
if let value {
content(value)
} else {
self
}
}
}


Теперь вы можете просто писать:

Text("Hello")
.ifLet(username) { Text("Welcome, \($0)") }


2️⃣ Условные модификаторы без лишних сложностей

Мы все пишем .padding() или .opacity() с условиями. Вместо того, чтобы заключать целые представления в блоки if, используйте это:

extension View {
@ViewBuilder
func apply(_ condition: Bool, modifier: (Self) -> some View) -> some View {
if condition {
modifier(self)
} else {
self
}
}
}


Использование:

Text("Premium")
.apply(isPro) { $0.foregroundColor(.yellow) }


Одна строка, ничего лишнего.

3️⃣ Многоразовый AsyncImage с плейсхолдером

Загрузка изображений — обычное дело, но повторение одной и той же логики плейсхолдера утомляет. Сделайте один раз:

struct RemoteImage: View {
let url: URL
var body: some View {
AsyncImage(url: url) { phase in
switch phase {
case .success(let image): image.resizable().scaledToFit()
case .failure(_): Color.gray
case .empty: ProgressView()
@unknown default: EmptyView()
}
}
}
}


Теперь вам больше не придётся переписывать загрузчики изображений.

4️⃣ Форматирование даты в одну строку

Вместо того, чтобы создавать DateFormatter везде, добавьте расширение:

extension Date {
func formatted(_ style: DateFormatter.Style = .medium) -> String {
let formatter = DateFormatter()
formatter.dateStyle = style
return formatter.string(from: self)
}
}


Использование:

Text(Date().formatted(.long))


Легко читаемый и многоразовый код.

5️⃣ Автоматические вставки SafeArea

Не любите бороться с .ignoresSafeArea()? Добавьте небольшой вспомогательный метод:

extension View {
func fillScreen() -> some View {
self.frame(maxWidth: .infinity, maxHeight: .infinity)
.ignoresSafeArea()
}
}


Теперь для каждого полноэкранного представления требуется всего один модификатор.

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
4🥱3👍2👏1🤔1



tgoop.com/mobileproglib/6201
Create:
Last Update:

5 SwiftUI-хаков для более чистых приложений

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

1️⃣ Более безопасный способ развертывания Optional в представлениях

Вместо бесконечных операторов if let создайте простое расширение, которое сделает обработку опциональных параметров естественной:

extension View {
@ViewBuilder
func ifLet<T, Content: View>(_ value: T?, content: (T) -> Content) -> some View {
if let value {
content(value)
} else {
self
}
}
}


Теперь вы можете просто писать:

Text("Hello")
.ifLet(username) { Text("Welcome, \($0)") }


2️⃣ Условные модификаторы без лишних сложностей

Мы все пишем .padding() или .opacity() с условиями. Вместо того, чтобы заключать целые представления в блоки if, используйте это:

extension View {
@ViewBuilder
func apply(_ condition: Bool, modifier: (Self) -> some View) -> some View {
if condition {
modifier(self)
} else {
self
}
}
}


Использование:

Text("Premium")
.apply(isPro) { $0.foregroundColor(.yellow) }


Одна строка, ничего лишнего.

3️⃣ Многоразовый AsyncImage с плейсхолдером

Загрузка изображений — обычное дело, но повторение одной и той же логики плейсхолдера утомляет. Сделайте один раз:

struct RemoteImage: View {
let url: URL
var body: some View {
AsyncImage(url: url) { phase in
switch phase {
case .success(let image): image.resizable().scaledToFit()
case .failure(_): Color.gray
case .empty: ProgressView()
@unknown default: EmptyView()
}
}
}
}


Теперь вам больше не придётся переписывать загрузчики изображений.

4️⃣ Форматирование даты в одну строку

Вместо того, чтобы создавать DateFormatter везде, добавьте расширение:

extension Date {
func formatted(_ style: DateFormatter.Style = .medium) -> String {
let formatter = DateFormatter()
formatter.dateStyle = style
return formatter.string(from: self)
}
}


Использование:

Text(Date().formatted(.long))


Легко читаемый и многоразовый код.

5️⃣ Автоматические вставки SafeArea

Не любите бороться с .ignoresSafeArea()? Добавьте небольшой вспомогательный метод:

extension View {
func fillScreen() -> some View {
self.frame(maxWidth: .infinity, maxHeight: .infinity)
.ignoresSafeArea()
}
}


Теперь для каждого полноэкранного представления требуется всего один модификатор.

🐸 Библиотека мобильного разработчика

#буст

BY Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck


Share with your friend now:
tgoop.com/mobileproglib/6201

View MORE
Open in Telegram


Telegram News

Date: |

Members can post their voice notes of themselves screaming. Interestingly, the group doesn’t allow to post anything else which might lead to an instant ban. As of now, there are more than 330 members in the group. Telegram has announced a number of measures aiming to tackle the spread of disinformation through its platform in Brazil. These features are part of an agreement between the platform and the country's authorities ahead of the elections in October. It’s easy to create a Telegram channel via desktop app or mobile app (for Android and iOS): Just as the Bitcoin turmoil continues, crypto traders have taken to Telegram to voice their feelings. Crypto investors can reduce their anxiety about losses by joining the “Bear Market Screaming Therapy Group” on Telegram. 4How to customize a Telegram channel?
from us


Telegram Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck
FROM American