This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let viewController = SceneCreator().createScene() | |
let viewControllerMirror = Mirror(reflecting: viewController) | |
let interactor = viewControllerMirror.children | |
.first { $0.label == "interactor" }?.value as? Interactor |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let object = mirror.children | |
.first { $0.value as? Interactor } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)]) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let imageData = image.pngData() | |
let pasteboardItem: [[String : Any]] = [["com.instagram.sharedSticker.backgroundImage" : imageData]] | |
UIPasteboard.general.setItems(pasteboardItem, options: [:]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let deeplink = URL(string: "instagram-stories://share")! | |
let canOpen = UIApplication.shared.canOpenURL(deeplink) | |
if canOpen { | |
UIApplication.open(deeplink, options: [:]) | |
} else { | |
// Handle error | |
} |
OlderNewer