Skip to content

Instantly share code, notes, and snippets.

@PavlyukDev
PavlyukDev / UserDefaultEnumKey.swift
Created November 5, 2021 10:06
Property wrapper to save enum in UserDefaults
@propertyWrapper
class UserDefaultEnumKey<T, R: RawRepresentable> where R.RawValue == String {
let key: String
let defaultValue: T
init(_ key: R, defaultValue: T) {
self.key = key.rawValue
self.defaultValue = defaultValue
}
func reverseList(_ head: ListNode?) -> ListNode? {
var prev: ListNode? = nil
var curr = head
while curr != nil {
let next = curr?.next
curr?.next = prev
prev = curr
curr = next
}
@PavlyukDev
PavlyukDev / MiddleNode.swift
Created May 6, 2021 16:01
MiddleNode of ListNode
func middleNode(_ head: ListNode?) -> ListNode? {
var slow = head
var fast = head
while fast != nil && fast?.next != nil {
slow = slow?.next
fast = fast?.next?.next
}
return slow
}
import UIKit
protocol SomeExtension {
func doSomething()
}
extension SomeExtension {
func doSomething() {
print("Do nothing or error")
}
}
String(format: "%2$@, %1$@", "one", "two")
@PavlyukDev
PavlyukDev / ComponentLabel.swift
Last active February 26, 2019 20:06
Reactive extension ReactiveSwift
import UIKit
import ReactiveCocoa
import ReactiveSwift
public class ComponentLabel: UILabel {
public override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .yellow
}
@PavlyukDev
PavlyukDev / MySDK.podspec
Created April 10, 2018 15:34
Framework inside pods
Pod::Spec.new do |s|
s.name = 'MySDK'
s.version = '1.0.0'
s.summary = 'A really cool SDK that logs stuff.'
s.homepage = 'http://example.com/'
s.author = { 'Name' => 'sdk@example.com' }
s.license = { :type => 'Apache-2.0', :file => 'LICENSE' }
s.platform = :ios
@PavlyukDev
PavlyukDev / PublicInit.stencil
Created March 16, 2018 13:21
Create public init for structures, need to make structures conform to PublicInit protocol
{% for type in types.implementing.PublicInit %}
extension {{ type.name }} {
public init({% for var in type.storedVariables %}{{var.name}}: {{var.typeName}}{% if not forloop.last %}, {% endif %}{% endfor %}) {
{% for var in type.storedVariables %}
self.{{var.name}} = {{var.name}}
{% endfor %}
}
}
{% endfor %}
@PavlyukDev
PavlyukDev / BinarySearch.swift
Created March 15, 2018 15:28
Binary search for shifted array
// Binary search for shifted array
func binarySearch<T: Comparable>(arr: [T], target: T, range: Range<Int>) -> Int? {
if range.lowerBound >= range.upperBound { return nil }
let mid = range.lowerBound + (range.upperBound - range.lowerBound)/2
if arr[mid] == target {
return mid
} else if arr[mid] > target {
return binarySearch(arr: arr, target: target, range: range.lowerBound..<mid)
typealias UploadResult = (Data?, URLResponse?, Error?)
func uploadImage(url: URL, image: UIImage, token: String, completion: @escaping (UploadResult) -> Void) {
let session = URLSession(configuration: .default)
let request = uploadImageRequest(url: url, image: image, token: token)
session.dataTask(with: request, completionHandler: completion).resume()
}
private func uploadImageRequest(url: URL, image: UIImage, token: String) -> URLRequest {
var request = URLRequest(url: url)