Skip to content

Instantly share code, notes, and snippets.

Olivier Halligon AliSoftware

Block or report user

Report or block AliSoftware

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View CustomCodable+PropertyWrapper.swift
import Foundation
protocol TransformerType {
associatedtype BaseType
associatedtype TypeForCoding: Codable
static var encodeTransform: (BaseType) throws -> TypeForCoding { get }
static var decodeTransform: (TypeForCoding) throws -> BaseType { get }
}
@propertyWrapper
@AliSoftware
AliSoftware / RegEx.swift
Created Jul 31, 2019
Simple wrapper around NSRegularExpression to provide a swiftier API and, ability to have matches exposing Range instead of NSRange
View RegEx.swift
// Simple wrapper around NSRegularExpression to provide a swiftier API and, ability to have matches exposing Range instead of NSRange
import Foundation
struct RegEx {
let regex: NSRegularExpression
init(pattern: String, options: NSRegularExpression.Options = []) throws {
self.regex = try NSRegularExpression(pattern: pattern, options: options)
}
View Clamped+PropertyWrapper.swift
// Xcode 11b1
@propertyDelegate
struct Clamped<Value: Comparable> {
private var storage: Value
private var clamp: (Value) -> Value
init(min: Value, max: Value, initialValue: Value) {
let clampingFunction = { ($0...$0).clamped(to: min...max).lowerBound }
self.storage = clampingFunction(initialValue)
View Enum-Values-v1.swift
enum Demo {
case simple
case oneValue(Int)
case twoValues(String, Double)
case threeValues(one: Int, two: Float, [Int])
}
//: # Direct exposition in the enum
//: ## Sourcery Template
@AliSoftware
AliSoftware / Bindings.swift
Last active Nov 21, 2019
Re-implementation of @binding and @State (from SwiftUI) myself to better understand it
View Bindings.swift
/*:
This is a concept re-implementation of the @Binding and @State property wrappers from SwiftUI
The only purpose of this code is to implement those wrappers myself
just to understand how they work internally and why they are needed,
⚠️ This is not supposed to be a reference implementation nor cover all
subtleties of the real Binding and State types.
The only purpose of this playground is to show how re-implementing
them myself has helped me understand the whole thing better
@AliSoftware
AliSoftware / xcodeproj_check_files_in_proper_targets.rb
Last active May 2, 2019
This script walks thru all the files in a Xcode project's groups belong to the target they are supposed to, according to group names found while walking the groups hierarchy.
View xcodeproj_check_files_in_proper_targets.rb
#!/usr/bin/env ruby
# This script walks thru all the files in a Xcode project's groups belong to the target they are supposed to
# according to group names found while walking the groups hierarchy.
#
# This example only focuses on test files and groups/targets ending with "...Tests"
require 'xcodeproj'
def check(group, all_targets, walk_path, ctx_target_name = nil, ctx_expected_files_list = nil)
View Dangerfile-build_settings.rb
#######################################
# Check that some Build Settings (those defined by VERSION_SETTINGS below) are set on the right level (target/project)
#######################################
VERSION_SETTINGS = %w(GLOBAL_APP_VERSION GLOBAL_APP_BUILD_VERSION)
require 'xcodeproj'
project = Xcodeproj::Project.open('YOUR_PROJECT_NAME.xcodeproj')
target = project.targets.find("YOUR_TARGET_NAME").first
target.build_configurations.each do |bc|
## Don't allow some build settings at target level (but only at project level)
@AliSoftware
AliSoftware / Mirror+DebugDescription.swift
Created Jan 24, 2019
Some convenience methods using Mirror to build a nice custom debugDescription easily
View Mirror+DebugDescription.swift
extension Mirror {
/// Use this to help you implement a custom debugDescription listing all properties of your instances
///
/// - Parameters:
/// - subject: The instance for which to return the description.
///
/// Example usage:
///
/// extension MyType: CustomDebugStringConvertible {
@AliSoftware
AliSoftware / JSONDecoder+Nested.swift
Created Jan 24, 2019
Techniques to decode Decodable types that are nested under intermediate keys in a JSON
View JSONDecoder+Nested.swift
import Foundation
let json = """
{
"data": {
"items": [
{ "name": "Alice" },
{ "name": "Bob" },
{ "name": "Claudia" }
]
@AliSoftware
AliSoftware / CopyLabel.swift
Last active Jan 23, 2019
An UILabel subclass which allows you to show the "copy" MenuController item to copy its content to the pasteboard
View CopyLabel.swift
import UIKit
class CopyLabel : UILabel {
// MARK: Setup
override init(frame: CGRect) {
super.init(frame: frame)
configureMenu()
}
You can’t perform that action at this time.