[swift-evolution] where clauses on enum cases

Rex Fenley rex at remind101.com
Tue Mar 14 14:44:43 CDT 2017


I've run into a problem recently when using generics with enums where I'm
required to specify the type for a generic that isn't used for the enum
case that's constructed.

Example:

protocol Mapping {
    associatedtype Destination
}

enum EvictionPolicy {
    case append
    case replace
}

enum Map<T: Mapping, U: Mapping> where U.Destination: Collection {
    case object(T)
    case collection(U, EvictionPolicy)
}

class IntMapping: Mapping {
    typealias Destination = Int
}

class IntsMapping: Mapping {
    typealias Destination = [Int]
}

// Must specify types for generics that are not in use
let o = Map<IntMapping, IntsMapping>.object(IntMapping())
let c = Map<IntMapping, IntsMapping>.collection(IntsMapping(),
EvictionPolicy.append)

What I'd like to be able to do is the following

enum Map<T: Mapping> {
    case object(T)
    case collection(T, EvictionPolicy) where T.Destination: Collection
}

Could this be added to the language?

-- 

Rex Fenley  |  IOS DEVELOPER

Remind.com <https://www.remind.com/> |  BLOG <http://blog.remind.com/>
 |  FOLLOW
US <https://twitter.com/remindhq>  |  LIKE US
<https://www.facebook.com/remindhq>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170314/a0b33a22/attachment.html>


More information about the swift-evolution mailing list