Swift extension only when conforming to Class AND protocol

nwales

I have two protocols with extensions LoginPresenting and LoginDismissing. I want LoginPresenting extension only to apply to UIViewControllers that also implement LoginDismissing. I am trying to do it like so but have so far been unable to work out the syntax.

protocol LoginDismissing : class {
    func loginHasCompleted(withController: UIViewController)
}

extension LoginDismissing where Self:UIViewController {
    func loginHasCompleted(withController controller:UIViewController) {
        //...code ommited
    }
}

protocol LoginPresenting : class {
    func presentLogin()
}

The following is bad code, but I think it explains how I am attempting to make LoginPresenting only apply to UIViewControllers that also implement LoginDismissing.

extension LoginPresenting where Self:UIViewController, LoginDismissing //Syntax error here

    func presentLogin() {
        let lc = LoginViewController()
        let nav = UINavigationController(rootViewController: lc)
        nav.modalPresentationStyle = .fullScreen
        lc.loginDismissingDelegate = self //type LoginDismissing
        self.present(nav, animated: true, completion: nil)
    }
}
Jessy

You should enforce as many requirements as possible on the protocol itself, not the extensions.

protocol LoginPresenting: LoginDismissing & UIViewController {
  func presentLogin()
}

Also, class is old syntax, though not deprecated.

protocol LoginDismissing: AnyObject {

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Swift Class Extension Only When Conforming to Protocol

ios swift class conforming protocol

Swift extension of a class ONLY when it conforms to a specific protocol

Class conforming to protocol as function parameter in Swift

Declare class variable as conforming to Swift protocol

In Swift how can I filter an array of objects conforming to a protocol by their class?

Swift Protocol Function: returning the same type of conforming class

Detect class of an object conforming to a protocol?

When to use `protocol` and `protocol: class` in Swift?

Mutability of a class after conforming to protocol is in question

Why extend class instead of conforming to a protocol?

Protocol Extension in Swift Where Object Is a Class and conforms to a Protocol

A protocol is not conforming to a class inherited from a generic parent class?

swift protocol extension default implementation vs actual implementation in class

Class conforming to Codable protocol fails with encodeWithCoder: unrecognized selector sent to instance

Class With Non-Optional Property Conforming To Protocol With Optional Property

Swift Protocol-Oriented Programming: Can Protocol Extension Property Have Same Name As Base Class Property

Weak property in a Swift protocol may only be a class or class-bound protocol type

Extension of a protocol where the associatedType is class?

Class to protocol conversation in swift

Swift Protocol of a particular class

Swift Protocol on a specific class?

Swift protocol allows unimplemented function when it exists in base class

Swift Class Pointer as? Class Protocol?

Objective-C runtime: What does declaring a variable of type Class (objc_class) conforming to a protocol mean?

How to expose existing property on Obj-C class using an extension protocol in Swift

Swift. unowned may only be applied to class and class-bound protocol types. weak works fine

Add class property to protocol in Swift

Requiring Protocol and Class in Swift Properties

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  3. 3

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  4. 4

    pump.io port in URL

  5. 5

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    Do Idle Snowflake Connections Use Cloud Services Credits?

  9. 9

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

  10. 10

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  11. 11

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  12. 12

    Generate random UUIDv4 with Elm

  13. 13

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  14. 14

    Is it possible to Redo commits removed by GitHub Desktop's Undo on a Mac?

  15. 15

    flutter: dropdown item programmatically unselect problem

  16. 16

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  17. 17

    EXCEL: Find sum of values in one column with criteria from other column

  18. 18

    Pandas - check if dataframe has negative value in any column

  19. 19

    How to use merge windows unallocated space into Ubuntu using GParted?

  20. 20

    Make a B+ Tree concurrent thread safe

  21. 21

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

HotTag

Archive