Swift | Вопросы собесов
2.13K subscribers
28 photos
951 links
Download Telegram
🤔 Какие property wrapper знаешь (iOS 17) ?

Некоторые основные и нововведённые property wrappers:
-
@State
-
@Binding
-
@ObservedObject
-
@StateObject
-
@Environment
-
@EnvironmentObject

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как сравниваются значения в dictionary?

В Swift словарь (`Dictionary<Key, Value>`) – это неупорядоченная коллекция пар `ключ → значение`, где ключи уникальны.

🟠Сравнение двух словарей (`==`)
Swift позволяет сравнивать два словаря по их ключам и значениям, если и ключи, и значения соответствуют протоколу Equatable.
let dict1 = ["name": "Alice", "age": "25"]
let dict2 = ["name": "Alice", "age": "25"]
let dict3 = ["name": "Bob", "age": "30"]

print(dict1 == dict2) // true (значения одинаковые)
print(dict1 == dict3) // false (разные значения)


Ошибка при сравнении Dictionary без Equatable
Если значения не соответствуют `Equatable`, сравнение не сработает:
struct User {
let name: String
}

let dict1 = ["user": User(name: "Alice")]
let dict2 = ["user": User(name: "Alice")]

// Ошибка: Type 'User' does not conform to protocol 'Equatable'
// print(dict1 == dict2)


Решение: Сделать User Equatable:
struct User: Equatable {
let name: String
}

print(dict1 == dict2) // Теперь работает!


🟠Поиск и сравнение отдельных значений
Можно сравнивать отдельные элементы по ключу.
let dict = ["name": "Alice", "age": "25"]

if dict["name"] == "Alice" {
print("Имя совпадает") //
}


🟠Сравнение по ключам (`keys`) и значениям (`values`)
Можно сравнить только ключи или только значения.
let dict1 = ["name": "Alice", "age": "25"]
let dict2 = ["age": "30", "name": "Alice"]

print(dict1.keys == dict2.keys) // true (ключи одинаковые)


Сравнение значений
print(Set(dict1.values) == Set(dict2.values)) //  true (если порядок неважен)


🟠Сравнение словарей с разными типами (`Any`)
Если словарь хранит Any, то прямое сравнение не сработает, и нужно сравнивать элементы вручную.
let dict1: [String: Any] = ["name": "Alice", "age": 25]
let dict2: [String: Any] = ["name": "Alice", "age": 25]

// Функция сравнения словарей с `Any`
func areDictionariesEqual(_ dict1: [String: Any], _ dict2: [String: Any]) -> Bool {
return NSDictionary(dictionary: dict1).isEqual(to: dict2)
}

print(areDictionariesEqual(dict1, dict2)) // true


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Можно ли изменить push, пока он тебе не показался?

Да, если используется Notification Service Extension, можно перехватить и изменить UNNotificationRequest. Это должно быть сделано быстро, так как система ограничивает время на обработку.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1