> On Aug 8, 2017, at 06:38, Karl Wagner <razie...@gmail.com> wrote:
> 
> 
>>> On 8. Aug 2017, at 04:35, David Sweeris via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> 
>>> On Aug 7, 2017, at 3:00 PM, Logan Shire via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> One of my longstanding frustrations with generic types and protocols has 
>>> been how hard it is to work with them when their type is unspecified.
>>> Often I find myself wishing that I could write a function that takes a 
>>> generic type or protocol as a parameter, but doesn’t care what its generic 
>>> type is.
>>> 
>>> For example, if I have a type:
>>> 
>>> struct Foo<T> {
>>>     let name: String
>>>     let value: T
>>> }
>>> 
>>> or:
>>> 
>>> protocol Foo {
>>>     associatedtype T
>>>     var name: String { get }
>>>     var value: T { get }
>>> }
>>> 
>>> And I want to write a function that only cares about Foo.name, I’d like to 
>>> be able to:
>>> 
>>> func sayHi(to foo: Foo) {
>>>     print("hi \(foo.name)")
>>> }
>>> 
>>> But instead I get the error, “Reference to generic type Foo requires 
>>> arguments in <…>”
>>> 
>>> Also, when you want to have a polymorphic array of generic types, you can’t:
>>> 
>>> let foos: [Foo] = [Foo(name: "Int", value: 2), Foo(name: "Double", value: 
>>> 2.0)]
>>> 
>>> And if you remove the explicit type coercion, you just get [Any]
>>> 
>>> let foos = [Foo(name: "Int", value: 2), Foo(name: "Double", value: 2.0)]
>>> 
>>> I wish that could be inferred to be [Foo].
>> 
>> What happens if you try to say "foos: [Foo<Any>] = ..."? 
>> 
> 
> Foo<Int> and Foo<Any> are very different. Otherwise, you could take a 
> Foo<Int>, cast it to a Foo<Any> and set a String as its value.
> 
> I think what he means are partial generics, e.g: Foo<_>.

Oh I know, I just couldn't remember if it'd work as long as you didn't mess 
with the generic bits.

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

Reply via email to