> Any advice how to rewrite the code so it still would do its job under the 
> hood?
I'm not aware of any clean way to do this (with current Swift ;-) — but this 
hack passes compilation:

protocol Proto : class {
        // `A` is a generic type and therefore should stay as an associatedtype
        associatedtype A
        func performWith(_ a: A)
}

struct Box<B> {
        var performWith: (B) -> Void

        init<T: Proto>(value: T) where T.A == B {
                self.performWith = value.performWith
        }
}

final class SomeType<B> {
        var protos: [Box<B>]

        init(_ protos: [Box<B>]) {
                self.protos = protos
        }

        func callProtosWith(_ b: B) {
                self.protos.forEach {
                        $0.performWith(b)
                }
        }
}

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

Reply via email to