This sounds pretty interesting.

But I can’t totally wrap my head around it. How do I "wrap types into enum 
cases”? Could you provide a sample code? Thanks.

> On 11 Jul 2017, at 8:50 PM, Adrian Zubarev <adrian.zuba...@devandartist.com> 
> wrote:
> 
> If the solution you seek is not designed so that the module user can extend 
> the set of types then you could wrap your types into enum cases and use the 
> enum for your set. ;) When Swift will support anonymous enum cases, this will 
> be an elegant solution to these type of things.
> 
> -- 
> Adrian Zubarev
> Sent with Airmail
> Am 11. Juli 2017 um 14:46:12, Glen Huang via swift-users 
> (swift-users@swift.org <mailto:swift-users@swift.org>) schrieb:
> 
>> Thanks for bringing AnyHashable to my attention.
>> 
>> It works, but the types are now erased. I want to have a union of the two 
>> sets because I want to loop over it to treat each contained item as Named, 
>> so I can process them as though they are of the same type. Is this type of 
>> use case really should be addressed using super class?
>> 
>>> On 11 Jul 2017, at 7:38 PM, Howard Lovatt <howard.lov...@gmail.com 
>>> <mailto:howard.lov...@gmail.com>> wrote:
>>> 
>>> You can have a set of AnyHashable:
>>> 
>>>> var item = Set<AnyHashable>()
>>>> item.insert(AnyHashable(Foo()))
>>>> item.insert(AnyHashable(Bar()))
>>> 
>>> Depends what you will do with the set if this is viable or not. You can 
>>> also use classes and ObjectID.
>>> 
>>> You might want this though:
>>> 
>>>> var item = [AnyHashable: Any]
>>> extension Dictionary where Key == AnyHashable, Value: Hashable {
>>>     func insert(_ value: Value) {
>>>         self[AnyHashable(value)] == value
>>>     }
>>> }
>>>> item.insert(Foo())
>>>> item.insert(Bar())
>>> 
>>> So you get at the stored value.
>>> 
>>> -- Howard.
>>> 
>>> On 11 Jul 2017, at 8:09 pm, Glen Huang via swift-users 
>>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>>> 
>>>> Hi,
>>>> 
>>>> I want to store some heterogeneous items all conform to a protocol inside 
>>>> a set, is it something possible to do in swift?
>>>> 
>>>> I tried this example:
>>>> 
>>>> ```
>>>> protocol Named: Hashable {
>>>>   var name: String { get }
>>>> }
>>>> 
>>>> extension Named {
>>>>   var hashValue: Int {
>>>>       return name.hashValue
>>>>   }
>>>> 
>>>>   static func ==(lhs: Self, rhs: Self) -> Bool {
>>>>       return lhs.name == rhs.name
>>>>   }
>>>> }
>>>> 
>>>> struct Foo: Named {
>>>>   var name = "foo"
>>>> }
>>>> 
>>>> struct Bar: Named {
>>>>   var name = "bar"
>>>> }
>>>> 
>>>> var item = Set<Named>()
>>>> item.insert(Foo())
>>>> item.insert(Bar())
>>>> ```
>>>> 
>>>> But it failed at `Set<Named>()` where it complained "Using 'Named' as a 
>>>> concrete type conforming to protocol 'Hashable' is not supported”.
>>>> 
>>>> After watching the WWDC session "Protocol-Oriented Programming in Swift” 
>>>> by Dave Abrahams, I try to use protocols whenever possible. But I can’t 
>>>> seem to overcome this barrier. Set.Element must confirm to Hashable, which 
>>>> inherits from Equatable, which has self requirement, which ultimately 
>>>> means that Set.Element all must be of the same type. So it seems it’s 
>>>> impossible to have heterogeneous items using protocol. Is that the case?
>>>> 
>>>> My use case is this:
>>>> 
>>>> I have an object that can contain two sets of other objects:
>>>> 
>>>> ```
>>>> class Parent {
>>>>   var foos: Set<Foo>
>>>>   var bars: Set<Bar>
>>>> }
>>>> ```
>>>> 
>>>> I want to define a computed property “all” that is the union of the two 
>>>> sets. Foo and Bar conform to the same protocol. I wonder what return type 
>>>> I should use for the union? Do I have to go back to OOP and define a super 
>>>> class for Foo and Bar?
>>>> 
>>>> Thanks.
>>>> _______________________________________________
>>>> swift-users mailing list
>>>> swift-users@swift.org <mailto:swift-users@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-users 
>>>> <https://lists.swift.org/mailman/listinfo/swift-users>
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users

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

Reply via email to