Skip to content

Instantly share code, notes, and snippets.

View DanielCardonaRojas's full-sized avatar

Daniel Cardona Rojas DanielCardonaRojas

View GitHub Profile
@DanielCardonaRojas
DanielCardonaRojas / IntersperseElement.swift
Last active September 17, 2021 13:50
Extension for swift arrays to intersperse elements
extension Array {
func interspersing(_ element: Element) -> Array {
var newArray: [Element] = []
for (index, item) in self.enumerated() {
newArray.append(item)
if index < self.count - 1 {
newArray.append(element)
}
}
return newArray
@DanielCardonaRojas
DanielCardonaRojas / UIStackView+Separator.swift
Last active September 15, 2021 21:35
UIStackView+Extensions
extension UIStackView {
func insertSeparator(_ createSeparator: (() -> UIView)) {
let subviews = self.arrangedSubviews
for v in subviews {
self.removeArrangedSubview(v)
}
for v in subviews {
self.addArrangedSubview(v)
@DanielCardonaRojas
DanielCardonaRojas / dialog_controller.dart
Last active September 2, 2021 23:07
Dialog Utilities for Flutter pages
import 'dart:async';
import 'package:flutter/material.dart';
typedef DialogShowHandler<T> = Future<T> Function();
class DialogController {
late DialogShowHandler _showDialog;
late Function _closeDialog;
Completer? _dialogCompleter;
@DanielCardonaRojas
DanielCardonaRojas / bloc_testing.dart
Created June 24, 2021 17:08
Bloc or Cubit test helper, without requiring bloc_test package
import 'package:mocktail/mocktail.dart';
import 'package:meta/meta.dart';
import 'package:bloc/bloc.dart';
import 'dart:async';
import 'package:test/test.dart';
abstract class Callable<T> {
void call([T? arg]) {}
}
@DanielCardonaRojas
DanielCardonaRojas / logging.dart
Created March 24, 2020 23:29
Logging mixin for Dart and Flutter projects
import 'dart:convert';
import 'package:logger/logger.dart';
import 'package:meta/meta.dart';
mixin Logging {
Logger _logger;
Logger get log {
return _logger ??= Logger(
@DanielCardonaRojas
DanielCardonaRojas / HTMLParser.swift
Last active May 4, 2021 18:56
HTMLParser #Swift
import Foundation
struct AttributeMatcher {
enum Comparison {
case equal, regex
}
let name: String
let value: String
let comparison: Comparison
@DanielCardonaRojas
DanielCardonaRojas / UIButton+Extensions.swift
Created April 7, 2021 22:37
UIButton extensions #swift #ios #button
extension UIButton {
func setInsets(
forContentPadding contentPadding: UIEdgeInsets,
imageTitlePadding: CGFloat
) {
let sign: CGFloat = semanticContentAttribute == .forceRightToLeft ? -1 : 1
let imageTitleSpacing = sign * imageTitlePadding
self.contentEdgeInsets = UIEdgeInsets(
@DanielCardonaRojas
DanielCardonaRojas / ArrayExtension.swift
Last active March 27, 2021 01:08
More Array Extensions flattened, unwrapped, all and any.
extension Array {
func flattened<T>() -> [T] where Element == [T] {
return self.flatMap({ $0 })
}
func all(_ pred: (Element) -> Bool) -> Bool {
return self.reduce(true, { acc, v in acc && pred(v) })
}
func any(_ pred: (Element) -> Bool) -> Bool {
@DanielCardonaRojas
DanielCardonaRojas / StringExtensions.swift
Last active February 1, 2021 15:14
String extensions
import Foundation
// MARK: - Getting substrings
// String API lacks take(while:) and suffix(while:) but has drop(while:) and prefix(while:)
extension String {
func prefix(while predicate: (Unicode.Scalar) -> Bool) -> Substring {
return self.prefix(while: { (c: Character) -> Bool in
return c.unicodeScalars.contains(where: predicate)
})
}
@DanielCardonaRojas
DanielCardonaRojas / UIViewExtensions.swift
Last active December 11, 2020 17:11
UIView general purpuse utilities.
extension UIView {
func makeCircular() -> NSKeyValueObservation {
self.layer.cornerRadius = self.bounds.width/2
clipsToBounds = true
let observation = observe(\UIView.bounds, changeHandler: { this, change in
this.layer.cornerRadius = this.bounds.width/2
})
return observation
}