On 21.09.2016 9:30, Goffredo Marocchi via swift-evolution wrote:
If the reference to the instance of the class is cast to the protocol type,
I want other object to be aware of my API contract not the specific class
instance, then the protocol default method gets called and that is several
shades of not appropriate for me.


Could you provide some example? I was not able to reproduce such behavior(and was not expected to be able): (Probably, you want to mention helper methods in protocol extension that was not defined *in protocol itself*, then yes. But AFAIK not for the *default implementation* of protocol requirement i.e. the method/prop that *is* declared in "main" protocol definition)

protocol A {
    func foo()
}

extension A {
    func foo() { print("A") }
}

class C : A {
    func foo() { print("C") }
}


let a : A = C()
a.foo() // "C"


func f(a: A) {
    a.foo()
}
f(a: a) // "C"


func g<T>(a: T) where T : A {
    a.foo()
}
g(a: C()) // "C"


func h<T: Sequence>(a: T) where T.Iterator.Element : A {
    for e in a {
        e.foo()
    }
}
h(a: [C()]) // "C"


func i<T: Sequence>(a: T) where T.Iterator.Element == A {
    for e in a {
        e.foo()
    }
}
i(a: [a]) // "C"

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

Reply via email to