Skip to content

Instantly share code, notes, and snippets.

View MickhailP's full-sized avatar
🎯
Focusing on a issue

Mikhail Perevozchikov MickhailP

🎯
Focusing on a issue
View GitHub Profile
extension ViewController {
private func setNotificationForKeyboardAppearance() {
NotificationCenter.default.addObserver(
self,
selector: #selector(self.keyboardWillShow),
name: UIResponder.keyboardWillShowNotification,
object: nil)
NotificationCenter.default.addObserver(
@MickhailP
MickhailP / SyncOnMainThread.swift
Created May 3, 2023 10:23
sync() on MainThread
func syncOnMainThread<T>(execute block: () throws -> T) rethrows -> T {
if Thread.isMainThread {
return try block()
}
return DispatchQueue.main.sync(execute: block)
}
enum ScreenSize {
static let width = UIScreen.main.bounds.size.width
static let height = UIScreen.main.bounds.size.height
static let maxLength = max(ScreenSize.width, ScreenSize.height)
static let minLength = min(ScreenSize.width, ScreenSize.height)
}
enum DeviceTypes {
static let idiom = UIDevice.current.userInterfaceIdiom
@MickhailP
MickhailP / Validation.swift
Created March 15, 2023 19:10
Email and password validation
extension String {
var isValidEmail: Bool {
let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailPredicate = NSPredicate(format: "SELF MATCHES %@", emailFormat)
return emailPredicate.evaluate(with: self)
}
var isValidPassword: Bool {
//Regex restricts to 8 character minimum, 1 capital letter, 1 lowercased letter, 1 number
let passwordFormat = "(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{8,}"
@MickhailP
MickhailP / ChangeAppearance.swift
Created March 5, 2023 10:16
ChangeNavBarAppearance
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if let navController = window!.rootViewController as? UINavigationController {
navController.delegate = self
let appearance2 = UINavigationBarAppearance()
appearance2.backgroundColor = .systemBlue
appearance2.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance2.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
@MickhailP
MickhailP / EndpointProtocol.swift
Created January 14, 2023 11:47
NetworkEndpoint
protocol Endpoint {
var scheme: String { get }
var host: String { get }
var path: String { get }
var method: RequestMethod { get }
var header: [String: String]? { get }
var body: [String: String]? { get }
}
extension Endpoint {
@MickhailP
MickhailP / QuickSort.swift
Created January 10, 2023 19:30
AlgorithmsQuickSort
func quickSort(nums: [Int]) -> [Int] {
if nums.count < 2 {
return nums
} else {
let pivot = nums[0]
var lessPart: [Int] = []
var greaterPart: [Int] = []
for i in 1..<nums.count {
@MickhailP
MickhailP / RecursiveSum.swift
Created January 10, 2023 17:35
AlgorithmsRecursiveSum
func recursiveSum(_ nums: [Int]) -> Int {
if nums.count == 0 {
return 0
} else {
return nums[0] + recursiveSum(Array(nums.dropFirst()))
}
}
@MickhailP
MickhailP / Bundle-Decodable.swift
Created December 23, 2022 04:12
GenericBundelDecoder
import Foundation
extension Bundle {
func decode<T: Codable> (_ file: String) -> T {
guard let url = self.url(forResource: file, withExtension: nil) else {
fatalError("Failed to locate \(file) in bundle.")
}
guard let data = try? Data(contentsOf: url) else {
fatalError("Failed to load \(file) from bundle.")
@MickhailP
MickhailP / .swiftlint.yml
Created December 3, 2022 06:47
SwiftLint settings
disabled_rules:
- trailing_whitespace
- colon
- comma
- control_statement
- vertical_whitespace
- switch_case_alignment
- opening_brace
- comment_spacing
- trailing_newline