Skip to content

Instantly share code, notes, and snippets.

View nil-biribiri's full-sized avatar

NilNilNil nil-biribiri

  • Agoda
  • Bangkok
View GitHub Profile
@nil-biribiri
nil-biribiri / Accessible.swift
Created April 19, 2019 02:36
Auto create accessibilityIdentifier of view elements by using name "#ClassName.#ViewElementName".
protocol Accessible {
func generateAccessibilityIdentifiers()
}
extension Accessible {
func generateAccessibilityIdentifiers() {
#if DEBUG
let mirror = Mirror(reflecting: self)
@nil-biribiri
nil-biribiri / RealmManager.swift
Created April 11, 2019 10:30
Realm manager for Swift 5.0
import Realm
import RealmSwift
class RealmManager {
static let shared = RealmManager()
private func getRealm() -> Realm {
if let _ = NSClassFromString("XCTest") {
return try! Realm(configuration: Realm.Configuration(fileURL: nil, inMemoryIdentifier: "test", encryptionKey: nil, readOnly: false, schemaVersion: 0, migrationBlock: nil, objectTypes: nil))
} else {
@nil-biribiri
nil-biribiri / UINavigationController+Extension.swift
Created March 11, 2019 09:38
UINavigationController extension for pop to specific view controller type + completion after pop (For push to new VC).
extension UINavigationController {
func popToViewControllerType<ViewControllerType: UIViewController>(_ type: ViewControllerType.Type,
animated: Bool = false,
completion: ((UINavigationController) -> Void)? = nil) {
for eachVC in self.viewControllers {
if eachVC.isKind(of: type.self) {
self.popToViewController(eachVC, animated: animated)
completion?(self)
break
}
@nil-biribiri
nil-biribiri / HasCustomView.swift
Created February 21, 2019 09:52
Custom view protocols for CustomView in UIViewController
import UIKit
public protocol HasCustomView {
associatedtype CustomView: UIView
}
extension HasCustomView where Self: UIViewController {
/// The UIViewController's custom view.
public var customView: CustomView {
guard let customView = view as? CustomView else {
@nil-biribiri
nil-biribiri / UITextView_Extension.swift
Created February 18, 2019 09:58
UITextView extension for clickable hyperlink.
extension UITextView {
func hyperLink(originalText: String,
hyperLink: String,
urlString: String,
withFont font: UIFont = UIFont.systemFont(ofSize: 16.0),
textColor: UIColor = .black,
linkColor: UIColor = .blue) {
isEditable = false
let style = NSMutableParagraphStyle()
@nil-biribiri
nil-biribiri / ActivityPresentable.swift
Last active March 11, 2019 05:39
Extension for UIActivityIndicatorView in Swift 4.2.
import UIKit
protocol ActivityPresentable {
func presentActivity(_ style: UIActivityIndicatorView.Style,
withTintColor tintColor: UIColor?,
blockSuperView isBlockView: Bool)
func dismissActivity()
}
extension ActivityPresentable where Self: UIViewController {
@nil-biribiri
nil-biribiri / TopLevelUIUtilities.swift
Created February 1, 2019 03:34
UI setup class for test in Swift 4.0
import XCTest
import UIKit
class TopLevelUIUtilities<T: UIViewController> {
private var rootWindow: UIWindow!
func setupTopLevelUI(withViewController viewController: T, withNavigationController navController: Bool = false) -> T {
rootWindow = UIWindow(frame: UIScreen.main.bounds)
rootWindow.isHidden = false
@nil-biribiri
nil-biribiri / UIStackViewExtension.swift
Created January 25, 2019 04:54
Extension for insert separators in UIStackView
import UIKit
extension UIStackView {
func addSeparator(color: UIColor, withThickness thickness: CGFloat = 1.0 ) {
var index = self.arrangedSubviews.count
while index > 1 {
let separator = createSeparator(color: color, withThickness: thickness)
insertArrangedSubview(separator, at: index - 1) // (index-1) for centers only
if self.axis == .horizontal {
separator.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 1).isActive = true
@nil-biribiri
nil-biribiri / Logger.swift
Last active April 30, 2019 04:23
OSlog Wrapper class
import os.log
/// Wrapper class for os_log function
public class Logger: NSObject {
/// Returns the default singleton instance.
static let shared = Logger()
/// Application layer description
///
@nil-biribiri
nil-biribiri / Observable.swift
Created January 23, 2019 10:18
Observable for Swift 4.0
import Foundation
class Observable<T> {
typealias Listener = (T) -> ()
private var listener: Listener?
private var queue: DispatchQueue = DispatchQueue.main
var value: T {
didSet {
fire()