Skip to content

Instantly share code, notes, and snippets.

View egzonpllana's full-sized avatar
:octocat:
I'm addicted to challenges!

Egzon Pllana egzonpllana

:octocat:
I'm addicted to challenges!
View GitHub Profile
@egzonpllana
egzonpllana / JSONSerialization+SaveLoadToDocumentDirectory.swift
Last active December 29, 2021 15:58
Save Encodable object to document directory and load as Decodable object.
//
// Created by Egzon Pllana on 28.12.21.
//
import Foundation
class FilesIOManager {
// MARK: - Properties
@egzonpllana
egzonpllana / EmailPassword+validator.swift
Created May 10, 2021 15:00
Email and Password validator - Swift
import Foundation
extension String {
func isValidEmailAddress() -> Bool {
// swiftlint:disable line_length
let emailRegEx = """
(?:[a-zA-Z0-9!#$%\\&‘*+/=?\\^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%\\&'*+/=?\\^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])
"""
// swiftlint:enable line_length
let emailTest = NSPredicate(format: "SELF MATCHES[c] %@", emailRegEx)
@egzonpllana
egzonpllana / MapKit+SwiftUI.swift
Created April 7, 2021 11:42
Integration of UIKit frameworks to SwiftUI ecosystem through Coordinator.
/// Copyright (c) 2021 Razeware LLC
/// RayWenderlich SwiftUI Book 3.0 (2021)
/// Egzon Pllana 07.03.2021
import SwiftUI
import MapKit
// MARK: - SwiftUI Coordinator (connect delegate & protocols)
class MapCoordinator: NSObject {
var countCharactersInRow = getCharactersInARowCount(fromString: "aaaabbbcca")
func getCharactersInARowCount(fromString string: String) -> [[Character: Int]] {
print("Given string: ", string)
guard !string.isEmpty else { return []}
let charactersArray: [Character] = string.map { $0 }
var collectedData: [[Character: Int]] = []
var lastCharacter: Character = charactersArray.first!
@egzonpllana
egzonpllana / UserDefaults+Codable+PropertyWrappers.swift
Created January 20, 2021 20:44
Using TYUtils for Codable object through PropertyWrappers to store in User Preferences.
import UIKit
import TYUtils
// Codable Model
struct Person: Codable {
var name: String
}
// UserDefault Extension
private extension UserDefault.Key {
@egzonpllana
egzonpllana / TabBarIndicatorView.swift
Last active July 26, 2023 19:03
Add Indicator View over tab bar item. (Swift 5)
//
// Created by Egzon Pllana on 13.4.23.
// Copyright © 2023 Native Coders. All rights reserved.
//
import UIKit
class IndicatingTabBarController: UITabBarController, UITabBarControllerDelegate {
// MARK: - Properties -
@egzonpllana
egzonpllana / UIViewController+DragToDismissGesture.swift
Created October 5, 2020 06:15
Drag down view controller to dismiss. Swift 5
override func viewDidLoad() {
super.viewDidLoad()
let gestureRecognizer = UIPanGestureRecognizer(target: self,
action: #selector(panGestureRecognizerHandler(_:)))
view.addGestureRecognizer(gestureRecognizer)
}
@IBAction func panGestureRecognizerHandler(_ sender: UIPanGestureRecognizer) {
let touchPoint = sender.location(in: view?.window)
var initialTouchPoint = CGPoint.zero
@egzonpllana
egzonpllana / IAPService.swift
Last active May 19, 2021 12:25
StoreKit iOS Swift InAppPurchase Process SKPayment
// Created on 7/9/2020.
//
// Developed by: Kilo Loco
// Improved by Egzon Pllana
import Foundation
import StoreKit
protocol IAPServiceDelegate: class {
//
// Created by Egzon Pllana on 5/15/20.
// Copyright © 2020 Native Coders. All rights reserved.
//
import UIKit
class HomeTableViewController: UITableViewController {
// MARK: - Outlets
//
// Timestamp+ReadableDate.swift
// EReminder
//
// Created by Egzon Pllana on 3/12/20.
// Copyright © 2020 Native Coders. All rights reserved.
//
import Foundation