Skip to content

Instantly share code, notes, and snippets.

View giovani-pereira-ifood's full-sized avatar

Giovani Nascimento Pereira giovani-pereira-ifood

View GitHub Profile
@giovani-pereira-ifood
giovani-pereira-ifood / SceneCreator.swift
Last active January 10, 2020 22:09
Generic scene creator in swift
class SceneCreator {
func createScene() -> UIViewController {
let presenter = Presenter()
let router = Router()
let interactor = Interactor(presenter: presenter)
let viewController = ViewController(interactor: interactor, router: router)
router.viewController = viewController
@giovani-pereira-ifood
giovani-pereira-ifood / UsingMirror.swift
Last active January 10, 2020 21:11
Using mirror example
let viewController = SceneCreator().createScene()
let viewControllerMirror = Mirror(reflecting: viewController)
let interactor = viewControllerMirror.children
.first { $0.label == "interactor" }?.value as? Interactor
@giovani-pereira-ifood
giovani-pereira-ifood / MirrorExtractExtension.swift
Last active January 10, 2020 20:56
Mirror extract extension
extension XCTestCase {
enum MirrorConstants: String {
case interactor
case presenter
case router
}
func mirror<T>(property: MirrorConstants, ofType: T.Type, from object: Any?) -> T? {
guard let object = object else { return nil }
let mirror = Mirror(reflecting: object)
@giovani-pereira-ifood
giovani-pereira-ifood / SceneCreatorTest.swift
Last active January 11, 2020 15:47
mirror extension usage
class SceneCreatorTest: XCTestCase {
private let sut = SceneCreator()
func test_presentersViewShouldBeTheSameAsCreatedScene() {
// Given
let scene = sut.createScene()
// When
let interactor = mirror(property: .interactor, ofType: Interactor.self, from: scene)
let object = mirror.children
.first { $0.value as? Interactor }
class SceneCreatorTests: XCTestCase {
private let sut = SceneCreator()
func test_presentersViewShouldBeTheSameAsCreatedScene() {
let scene = sut.createScene()
guard let interactor = Mirror(reflecting: scene).children.first { $0.label == "interactor" }?.value as? Interactor,
let presenter = Mirror(reflecting: interactor).children.first { $0.label == "presenter" }?.value as? Presenter,
let presentersView = Mirror(reflecting: presenter).children.first { $0.label == "viewController" }?.value as? ViewController else {
struct Point {
let x: Int, y: Int
}
let p = Point(x: 21, y: 30)
let mirror = Mirror(reflecting: p)
print(mirror) // Mirror for Point
print(mirror.children.first) // Optional((label: Optional("x"), value: 21))
@giovani-pereira-ifood
giovani-pereira-ifood / createInstagramSharingContent.swift
Last active February 6, 2020 20:29
create instagram sharing content
func createInstagramStoriesSharing(for image: UIImage) -> URL? {
guard let url = URL(string: "instagram-stories://share") else { return nil }
// Add image to Pasteboard
let imageData = image.pngData()
let pasteboardItems: [[String: Any]] = [["com.instagram.sharedSticker.backgroundImage": image]]
// Update with new pasteboard items
UIPasteboard.general.setItems(pasteboardItems, options: [UIPasteboard.OptionsKey.expirationDate: Date().addingTimeInterval(60)])
@giovani-pereira-ifood
giovani-pereira-ifood / addImageToPasteboard.swift
Last active February 6, 2020 20:20
addImageToPasteboard.swift
let imageData = image.pngData()
let pasteboardItem: [[String : Any]] = [["com.instagram.sharedSticker.backgroundImage" : imageData]]
UIPasteboard.general.setItems(pasteboardItem, options: [:])
@giovani-pereira-ifood
giovani-pereira-ifood / openInstagramDeepLink.swift
Created February 6, 2020 20:28
openInstagramDeepLink.swift