Hmm..

What about such synthetic scenario:

at the moment of writing our code we have:

public protocol MyProtocol {
  func foo()
}

public struct StructA:MyProtocol {
  func foo()
}

public struct StructB:MyProtocol {
  func foo()
}

and have

public protocol ExtraProtocol1 {
  func bar()
}

public protocol ExtraProtocol2 {
  func blort()
}

then we actually can have such code:

func f(p: MyProtocol) {
  if let a = p as? struct<StructA, ExtraProtocol1> {
     a.foo()
     a.bar()
  }
  else
  if let b = p as? struct<StructB, ExtraProtocol2> {
     b.foo()
     b.blort()
  }
}

as we can(as example) expect that in 3rd party code someone will do:

extension StructA: ExtraProtocol1 {
  func bar() {}
}

extension StructB: ExtraProtocol2 {
  func blort() {}
}



On 13.05.2016 20:50, Adrian Zubarev via swift-evolution wrote:
        'struct<>' does seem redundant unless it becomes subtypeable. If
        you want a struct which conforms to several protocols, protocol<>
        already covers this.

    I think this is not correct. Lets check this example:

    func foo(value: SomeProtocol) {

        if let a = value as? struct<StructA, SomeProtocol> { /* do
    something with a */ }

        else if let b = value as? struct<StructB, SomeProtocol> { /* do
    something with b */ }

    }

    In this scenario you’ll be able to access properties and functions
    from `StructA` or `StructB` which might not be covered by
    `SomeProtocol`. Everything is merged nicely into one instance. But
    you are right it depends on the use-case.


There is no need to include the protocol here.   Just do this:

if let a = value as? StructA { use a }

Whoops, I forgot that this will do the trick. I apologize for any confusion
here, you are totally right.

That been said, do we really need `type<>` aka. `all<>` for value types? I
need to rethink this part of the proposal. Is there any use-case where we
would need this (any scenario for the future Swift version also counts)?

If we had `all<>` in Swift already for extendable reference types and one
day structs would become subtypeable, this wouldn’t be a huge problem to
upgrade `all<>` for structs I guess.

--
Adrian Zubarev
Sent with Airmail



_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to