#ios #swift #swiftui #binding #bug
Как сломать
Результат:
Как сломать
Xcode 16.3, чтобы в логах не было нормального описания ошибки:
import SwiftUI
struct BreakSwiftExample: View {
@State private var isOn = false
private var isOnBinding: Binding<Bool> {
.init(
get: { isOn },
set: changeToggle // не собирается
// set: { isOn = $0 } // собирается
)
}
var body: some View {
Toggle("Демо-тоггл", isOn: isOnBinding)
}
private func changeToggle(_ value: Bool) {
isOn = value
}
}
Результат:
Command SwiftCompile failed with a nonzero exit code❤2👍2🔥1
easy_dev991
struct ComplexModel { let name: String let id: Int let price: Double let isActive: Bool let creationDate: Date let websiteURL: URL? let tags: [String] let statistics: [String: Int] let description: String? } /// Выполнить…
#swift #foundation #keypath #hint
Представляю вам KeyPathComparator, доступный с iOS 15.
Решает задачу из опроса на изи)
Представляю вам KeyPathComparator, доступный с iOS 15.
Решает задачу из опроса на изи)
struct ComplexModel {
let name: String
let id: Int
let price: Double
let isActive: Bool
let creationDate: Date
let websiteURL: URL?
let tags: [String]
let statistics: [String: Int]
let description: String?
}
/// Выполнить работу с массивом и вернуть отсортированный массив
func doWork(with items: [ComplexModel]) -> [ComplexModel] {
// другая логика ...
return items.sorted(using: KeyPathComparator(\.name)) // <- вот
}
/// Выполнить работу с массивом и вернуть отсортированный массив
/// - Parameters:
/// - items: Изначальный массив
/// - order: Порядок сортировки
/// - Returns: Отсортированный массив
func doSortedWork(with items: [ComplexModel], order: SortOrder) -> [ComplexModel] {
// другая логика ...
return items.sorted(using: KeyPathComparator(\.name, order: order))
}
Apple Developer Documentation
KeyPathComparator | Apple Developer Documentation
A comparator that uses another sort comparator to provide the comparison of values at a key path.
👍4🔥2
#ios #swift #swiftui #maps #geocoding #hint
На прошлой неделе заметил, что релиз 3.10 приложения с площадками стал сильно греть телефон, и даже в статистике аккумулятора спустя всего 10 минут использования мое приложение было первым в списке по потреблению энергии 🙈
В том релизе я сделал много классных штук, и в том числе немного обновил старый код для работы с картой, в результате нагрузка на девайс выросла в разы.
На днях выпустил релиз с исправлением этих проблем, и вот главные выводы:
1️⃣ Если нужно получить локацию пользователя с использованием CLLocationManager, то лучше не использовать startUpdatingLocation(), а просто вызывать requestLocation() по таймеру, например раз в 10 секунд - нагрузка ощутимо упадет
2️⃣ Использовать reverseGeocodeLocation нужно не чаще раза в минуту, а лучше еще реже - если координаты ощутимо изменились (на 50 метров, например), и это точно нужно для правильной работы фичи
3️⃣ Если используете MKMapView внутри
На прошлой неделе заметил, что релиз 3.10 приложения с площадками стал сильно греть телефон, и даже в статистике аккумулятора спустя всего 10 минут использования мое приложение было первым в списке по потреблению энергии 🙈
В том релизе я сделал много классных штук, и в том числе немного обновил старый код для работы с картой, в результате нагрузка на девайс выросла в разы.
На днях выпустил релиз с исправлением этих проблем, и вот главные выводы:
1️⃣ Если нужно получить локацию пользователя с использованием CLLocationManager, то лучше не использовать startUpdatingLocation(), а просто вызывать requestLocation() по таймеру, например раз в 10 секунд - нагрузка ощутимо упадет
2️⃣ Использовать reverseGeocodeLocation нужно не чаще раза в минуту, а лучше еще реже - если координаты ощутимо изменились (на 50 метров, например), и это точно нужно для правильной работы фичи
3️⃣ Если используете MKMapView внутри
SwiftUI-обертки, то напишите явную проверку в методе updateUIView, чтобы обновление карты выполнялось только тогда, когда это 100% нужно - я для этого сделал флаг shouldUpdateRegion и передаю его в карту, а в методе updateUIView вызываю замыкание при обновлении карты, чтобы снять флаг🔥5❤2
#ios #swift #swiftui #contest
Нужно сверстать стек, где есть несколько
Должно получиться примерно как на картинке.
Шрифт для
Шрифт для
Не используем
Вот готовые модели для превью:
Кто первый сделает, тот молодец 🚀
Нужно сверстать стек, где есть несколько
Text с одинаковой структурой:
private struct UserInfo: Identifiable {
let id = UUID()
let label: String
let value: String
}
Должно получиться примерно как на картинке.
Шрифт для
label: .system(size: 20, weight: .bold)Шрифт для
value: .system(size: 16, weight: .regular)Не используем
markdown в тексте.Вот готовые модели для превью:
let items: [UserInfo] = [
.init(label: "Почта", value: "[email protected]"),
.init(label: "Телефон", value: "+79123456789"),
.init(
label: "Адрес",
value: "117513, г. Москва, ул. Профсоюзная, д. 129, корп. 3, кв. 117, подъезд 5, этаж 8"
)
]
Кто первый сделает, тот молодец 🚀
👌3