Skip to content

Instantly share code, notes, and snippets.

View eldaroid's full-sized avatar
🎯
Focusing

Попов Эльдар eldaroid

🎯
Focusing
View GitHub Profile
@eldaroid
eldaroid / repeatingTasks.sh
Last active October 13, 2024 04:00
RU: Скрипт на Bash создаёт копии указанного markdown-файла задачи, обновляя в них дату с заданной периодичностью (неделя, месяц или год) на несколько лет вперёд. EN: The Bash script creates copies of the specified markdown file of a task, updating the date in them with a specified periodicity (week, month or year) for several years ahead
#!/bin/bash
# Проверка наличия аргументов
if [ $# -eq 0 ]; then
echo "Неправильное использование скрипта. Корректный формат: ./repeat.sh --task task.md --every week|month|year"
exit 1
fi
# Проверка первых двух аргументов
if [ -z "$1" ] || [ -z "$2" ]; then
@eldaroid
eldaroid / LogSizes.swift
Last active October 7, 2024 19:00
RU: Инструмент для отладки UI в SwiftUI, позволяя более детально контролировать и понимать процесс вычисления размеров и размещения представлений. EN: A tool for debugging UIs in SwiftUI, allowing for more detailed control and understanding of the process of calculating view sizing and placement
struct LogSizes: Layout {
var label: String
func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) -> CGSize {
assert(subviews.count == 1)
print(String(format: "предлагают _%@_: →%.2f x ↓%.2f", label, proposal.width ?? 0, proposal.height ?? 0))
let result = subviews[0].sizeThatFits(proposal)
print(String(format: "ответ от _%@_: →%.2f x ↓%.2f", label, result.width, result.height))
return result
}
@eldaroid
eldaroid / DynamicTextColoring.swift
Last active October 7, 2024 19:00
RU: Динамическое окрашивание текста: 1) Встроенным текстовым стилированием; 2) AttributedString EN: Dynamic text colorization: 1) Built-in text styling; 2) AttributedString
struct DynamicTextColoring: View {
var body: some View {
VStack {
// только с 16 оси
Text("1) Коллеги и платформа \(Text("поздравляют Вас").foregroundColor(.teal))!")
Text(attributedCongratulationString)
}
}
@eldaroid
eldaroid / View+ConditionModifiers.swift
Last active October 7, 2024 19:01
RU: Этот код расширяет протокол View в SwiftUI, предоставляя методы для условного применения модификаторов к представлениям на основе булевых и опциональных значений. EN: This code extends the View protocol in SwiftUI, providing methods for conditionally applying modifiers to views based on boolean and optional values
import SwiftUI
// Extension to handle boolean conditions
extension View {
@ViewBuilder
public func `if`<Transform: View>(
_ value: Bool,
transform: (Self) -> Transform
) -> some View {
if value {
extension FocusedValues {
var myKey: Binding<String>? {
get { self[MyFocusKey.self] }
set { self[MyFocusKey.self] = newValue }
}
struct MyFocusKey: FocusedValueKey {
typealias Value = Binding<String>
}
}
@eldaroid
eldaroid / DoubleHumanFormatted.swift
Last active October 7, 2024 19:01
RU: Преобразование чисел в удобочитаемый формат, добавляя соответствующие постфиксы для больших чисел (например, 123 тысяч, 5 миллионов, 8 миллиардов и т.д.). EN: Convert numbers into a readable format by adding appropriate postfixes for large numbers (e.g. 123 thousand, 5 million, 8 billion, etc.)
public extension Double {
func humanFormatted(
groupingSeparator: String = " ",
roundingMode: NumberFormatter.RoundingMode = .halfEven,
fractionDigits: Int = 1,
threshold: Double = 9_999
) -> (stringValue: String, postfix: String?) {
let dividerNames: [String?] = [nil, "тыс.", "млн", "млрд", "трлн", "квадрлн"]
struct DefaultPopUps: View {
@State var onSheet = false
@State var onFullScreenCover = false
@State var onPopover = false
@State var onAlert = false
@State var onActionSheet = false
var body: some View {
VStack {
Button(action: {
// BlurReplace, Identity, Move, Offset,
// Opacity, Push, Scale, Slide
// Asymmetric
struct ContentView: View {
@State private var showBlurReplace = false
@State private var showIdentity = false
@State private var showMove = false
@State private var showOffset = false
@State private var showOpacity = false
@State private var showPush = false
@eldaroid
eldaroid / AnimationExample.swift
Last active October 7, 2024 19:02
RU: Визуализация различных типов анимационных кривых и наблюдение их поведения: в реальном времени. EN: Visualize different types of animation curves and observe their behavior: in real time
struct AnimationExample: View {
@ObservedObject var trace = AnimationTrace()
@State var animating: Bool = false
@State var selectedAnimationIndex: Int = 0
@State var slowAnimations: Bool = false
var selectedAnimation: (String, Animation) {
return animations[selectedAnimationIndex]
}
var body: some View {
VStack {
@eldaroid
eldaroid / LifeCycleViewController.swift
Last active October 7, 2024 19:02
RU: Исследуем жизненный цикл ViewController. EN: Let's study the ViewController life cycle
final class ViewController: UIViewController {
private let name = "🖥️"
private let infoLabel: UILabel = {
let label = UILabel()
label.text = "AppDelegate Life Cycle"
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
private let switchButton: UIButton = {