Skip to content

Instantly share code, notes, and snippets.

View nikolaykasyanov's full-sized avatar

Nikolay Kasyanov nikolaykasyanov

  • Careem
  • Berlin, Germany
View GitHub Profile
@nikolaykasyanov
nikolaykasyanov / pre-commit
Last active March 28, 2023 12:36
Useful pre-commit hook for submodules
#!/bin/sh
if git status | grep -i 'HEAD detached' > /dev/null 2>&1; then
echo "You should not commit while in detached state, either create a new brach or checkout existing one before committing."
exit 1
fi
@nikolaykasyanov
nikolaykasyanov / Example.swift
Last active September 27, 2019 14:53
A property wrapper that creates subject-backed observers (RxSwift)
class ViewModel {
init() {
// accessing underlying subject:
$buttonTapped
.asObservable()
...
}
// look ma, no explicit subject property

Self в Swift и Objective-C

Дисклеймер: речь идёт об однопоточном коде, оставим ужасы параллельного исполнения за скобками. Также не рассматривается возможность overrelease.

Objective-C

Объект точно не ритейнится на время выполнения его метода, пруфы:

#import <Foundation/Foundation.h>
@interface Node: NSObject
@property (nonatomic, weak) Node *parent;
@property (nonatomic) NSArray *children;
@end
@implementation Node {
import Foundation
class Child {
deinit {
print("Child.deinit")
}
var parent: Parent?
func removeFromParent() {
@nikolaykasyanov
nikolaykasyanov / cmake.rb
Created February 4, 2019 20:28
CMake 3.12.4 formula
class Cmake < Formula
desc "Cross-platform make"
homepage "https://www.cmake.org/"
url "https://cmake.org/files/v3.12/cmake-3.12.4.tar.gz"
sha256 "5255584bfd043eb717562cff8942d472f1c0e4679c4941d84baadaa9b28e3194"
head "https://cmake.org/cmake.git"
bottle do
cellar :any_skip_relocation
sha256 "7bcd5ae043d2a6fd5983b026ccdc70b7594e0dbe9de4d367cfcead7edf3c8596" => :mojave
import Swift
func LCS<T: Equatable>(a: [T], b: [T]) -> [[UInt]] {
let rows = a.count + 1
let cols = b.count + 1
var matrix: [[UInt]] = Array(count: rows, repeatedValue: Array(count: cols, repeatedValue: 0))
for i in 1..<rows {
protocol RemoteAPIDelegate: class {
func remoteAPIDidLoadPosts(_ posts: NSArray)
}
class RemoteAPI {
weak var delegate: RemoteAPIDelegate?
func loadPosts() {
protocol ReachabilityDelegate: class {
func reachabilityDidChange(_ reachable: Bool)
}
class Reachability {
weak var delegate: ReachabilityDelegate?
}
class Model: ReachabilityDelegate {
func reachabilityDidChange(_ reachable: Bool) {
@nikolaykasyanov
nikolaykasyanov / maybe.swift
Last active February 3, 2018 23:27
Swift & Monads
// Make Optional a monad
extension Optional {
// Scala style, define `flatMap` directly
func flatMap<U>(f: (a: T) -> Optional<U>) -> Optional<U> {
switch (self) {
case .None: return nil
case .Some(let value): return f(a: value)
}
}