Skip to content

Instantly share code, notes, and snippets.

View Otbivnoe's full-sized avatar

Nikita Ermolenko Otbivnoe

View GitHub Profile
protocol ProfileRoute {
func openProfile(for user: User)
}
extension ProfileRoute where Self: UIViewController {
func openProfile(for user: User) {
let profileViewController = ProfileViewController(user: user)
present(profileViewController, animated: true, completion: nil)
}
}
extension UIViewController {
func openProfile(for user: User) {
let profileViewController = ProfileViewController(user: user)
present(profileViewController, animated: true, completion: nil)
}
}
#!/bin/sh
if [ -n "$XcodeProjectPath" ]; then
open -a Terminal "$XcodeProjectPath"/..
else
open -a Terminal "$XcodeWorkspacePath"/..
fi
@Otbivnoe
Otbivnoe / enum-all-values.swift
Last active February 8, 2018 03:42
Get the all values for enum
extension RawRepresentable {
static var allValues: [Self] {
var index = 0
let iterator: AnyIterator<Self> = AnyIterator {
let current = withUnsafePointer(to: &index) { unsafePointer in
unsafePointer.withMemoryRebound(to: Self.self, capacity: 1) { unsafePointer in
unsafePointer.pointee
}
}
/// Respresents a disposable resource.
public protocol Disposable {
func dispose()
}
/// Represents disposable resource with state tracking.
public protocol Cancelable: Disposable {
var isDisposed: Bool { get }
}
let disposable = BooleanDisposable()
print("isDisposed = \(disposable.isDisposed)")
print("dispose")
disposable.dispose()
print("isDisposed = \(disposable.isDisposed)")
// log:
// isDisposed = false
let disposable1 = Disposables.create { print("disposed-1 ☠️") }
let disposable2 = Disposables.create { print("disposed-2 ☠️") }
let singleAssignmentDisposable = SingleAssignmentDisposable()
print("set disposable1")
singleAssignmentDisposable.setDisposable(disposable1)
print("set disposable2")
singleAssignmentDisposable.setDisposable(disposable2) // ⚠️⚠️⚠️ fatal error
let disposable1 = Disposables.create { print("disposed-1 ☠️") }
let disposable2 = Disposables.create { print("disposed-2 ☠️") }
let disposable3 = Disposables.create { print("disposed-3 ☠️") }
let disposable = CompositeDisposable(disposable1, disposable2)
print("insert disposable3")
let key3 = disposable.insert(disposable3)
if let key = key3 {
let disposable1 = Disposables.create { print("disposed-1 ☠️") }
let disposable2 = Disposables.create { print("disposed-2 ☠️") }
let disposable3 = Disposables.create { print("disposed-3 ☠️") }
let disposable = CompositeDisposable(disposable1, disposable2)
print("dispose")
disposable.dispose()
print("insert disposable3")
let disposable1 = Disposables.create { print("disposed-1 ☠️") }
let disposable2 = Disposables.create { print("disposed-2 ☠️") }
let disposable3 = Disposables.create { print("disposed-3 ☠️") }
let disposable = CompositeDisposable(disposables: [disposable1, disposable2, disposable3])
print("dispose")
disposable.dispose()
// log: