MOBILEPROGLIB Telegram 6036
⚠️ 5 ловушек Swift, которые вы не заметите, пока не станет слишком поздно

1️⃣ Сильные циклы ссылок в замыканиях

Замыкания по умолчанию захватывают self. Если вы не используете [weak self], вы можете получить цикл удержания и утечку памяти.

class ProfileViewModel {
var onUpdate: (() -> Void)?

func setup() {
onUpdate = {
self.doSomething() // ⚠️ This captures self strongly
}
}
}


Исправление:

onUpdate = { [weak self] in
self?.doSomething()
}


2️⃣ Принудительное развертывание Optional

Это очевидно, но все еще часто встречается это в коде:

let name: String? = getName()
print(name!) // Crashes if nil


Даже «безопасные» места могут подвести вас — например, повторное использование ячеек в UITableView.

Вместо этого используйте guard let или if let. Никогда не доверяйте данным слепо.

3️⃣ Неявно разворачиваемые Optional (String!)

Они кажутся удобными. Но они вызывают сбой, как и !, если не настроены правильно.

var token: String!
print(token.count) // If token is nil, boom.


По умолчанию используется ?. Используйте ! только в том случае, если вы абсолютно уверены, что он инициализирован перед использованием (например, инжектирован через сториборд).

4️⃣ Не помеченные как final классы

По умолчанию каждый класс в Swift может быть подклассом. Это может привести к снижению производительности из-за динамической диспетчеризации.

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

final class UserManager {
// Now faster method calls, no subclassing allowed
}


5️⃣ Отсутствие weak у делегатов

Классическая ошибка в конфигурациях MVC или MVVM.

protocol MyDelegate: AnyObject {
func didUpdate()
}

class MyController {
var delegate: MyDelegate? // Should be weak
}


Всегда объявляйте свойства делегатов как weak, чтобы избежать циклов удержания:

weak var delegate: MyDelegate?


Какие ошибки чаще вам встречаются? Пишите в комментариях 💬

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥1😁1



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

⚠️ 5 ловушек Swift, которые вы не заметите, пока не станет слишком поздно

1️⃣ Сильные циклы ссылок в замыканиях

Замыкания по умолчанию захватывают self. Если вы не используете [weak self], вы можете получить цикл удержания и утечку памяти.

class ProfileViewModel {
var onUpdate: (() -> Void)?

func setup() {
onUpdate = {
self.doSomething() // ⚠️ This captures self strongly
}
}
}


Исправление:

onUpdate = { [weak self] in
self?.doSomething()
}


2️⃣ Принудительное развертывание Optional

Это очевидно, но все еще часто встречается это в коде:

let name: String? = getName()
print(name!) // Crashes if nil


Даже «безопасные» места могут подвести вас — например, повторное использование ячеек в UITableView.

Вместо этого используйте guard let или if let. Никогда не доверяйте данным слепо.

3️⃣ Неявно разворачиваемые Optional (String!)

Они кажутся удобными. Но они вызывают сбой, как и !, если не настроены правильно.

var token: String!
print(token.count) // If token is nil, boom.


По умолчанию используется ?. Используйте ! только в том случае, если вы абсолютно уверены, что он инициализирован перед использованием (например, инжектирован через сториборд).

4️⃣ Не помеченные как final классы

По умолчанию каждый класс в Swift может быть подклассом. Это может привести к снижению производительности из-за динамической диспетчеризации.

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

final class UserManager {
// Now faster method calls, no subclassing allowed
}


5️⃣ Отсутствие weak у делегатов

Классическая ошибка в конфигурациях MVC или MVVM.

protocol MyDelegate: AnyObject {
func didUpdate()
}

class MyController {
var delegate: MyDelegate? // Should be weak
}


Всегда объявляйте свойства делегатов как weak, чтобы избежать циклов удержания:

weak var delegate: MyDelegate?


Какие ошибки чаще вам встречаются? Пишите в комментариях 💬

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

#буст

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


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

View MORE
Open in Telegram


Telegram News

Date: |

The court said the defendant had also incited people to commit public nuisance, with messages calling on them to take part in rallies and demonstrations including at Hong Kong International Airport, to block roads and to paralyse the public transportation system. Various forms of protest promoted on the messaging platform included general strikes, lunchtime protests and silent sit-ins. The group also hosted discussions on committing arson, Judge Hui said, including setting roadblocks on fire, hurling petrol bombs at police stations and teaching people to make such weapons. The conversation linked to arson went on for two to three months, Hui said. Your posting frequency depends on the topic of your channel. If you have a news channel, it’s OK to publish new content every day (or even every hour). For other industries, stick with 2-3 large posts a week. There have been several contributions to the group with members posting voice notes of screaming, yelling, groaning, and wailing in different rhythms and pitches. Calling out the “degenerate” community or the crypto obsessives that engage in high-risk trading, Co-founder of NFT renting protocol Rentable World emiliano.eth shared this group on his Twitter. He wrote: “hey degen, are you stressed? Just let it out all out. Voice only tg channel for screaming”. More>>
from us


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