[swift-users] wishing I could cast (sort of) to protocol with associated type
Jordan Rose
jordan_rose at apple.com
Wed Nov 2 15:58:16 CDT 2016
The only real way to do this today is to have two layers of protocol:
protocol SpecialControllerBase {
var currentValueBase: SpecialValue? { get }
}
protocol SpecialController: SpecialControllerBase {
associatedtype SpecialValueType : SpecialValue
var currentValue: SpecialValueType? { get }
}
extension SpecialController {
var currentValueBase: SpecialValue? { return self.currentValue }
}
Supporting this natively is the feature called generalized existentials, described in the “Generics Manifesto <https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#generalized-existentials>” of potential future Swift features. This has a lot of design and implementation considerations, so it’s not planned to happen right away, but it’s definitely a heavily-requested feature.
Jordan
> On Nov 2, 2016, at 12:31, Robert Nikander via swift-users <swift-users at swift.org> wrote:
>
> Hi,
>
> In the following code, I want to test if x is a `SpecialController`. If it is, I want to get the `currentValue` as a `SpecialValue`. How do you do this? If not with a cast, then some other technique.
>
> I understand the error, and that SpecialController by itself is not a simple type to cast to. But it seems like what I’m saying is logically consistent and not that complicated. Is there really no way to *say* it in Swift?
>
> protocol SpecialController {
> associated type SpecialValueType : SpecialValue
> var currentValue: SpecialValueType? { get }
> }
> ...
> var x: AnyObject = ...
> if let sc = x as? SpecialController { // does not compile
>
> Rob
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161102/d926501e/attachment.html>
More information about the swift-users
mailing list