[swift-evolution] [Discussion] Seal `T.Type` into `Type<T>`

Anton Zhilin antonyzhilin at gmail.com
Fri Jul 15 14:49:26 CDT 2016


I suggested it because now we can’t call any initializers on Type<T>. If we
add _Type<T>, we can add public initializers and keep Type<T> instances
unique.

// No uniqueness guarantee
internal final class _Type<T> {
    var _metatype: Metatype<T>

    init()
    init(_: AnyMetatype)
    init?<U>(casting: Type<U>)
}

internal var _typeStorage = Set<_Type<Any>>()
// Uniqueness guarantee// 'final class' is an implementation detail
public struct Type<T> {
    internal var _impl: _Type<T>

    // Notice 'public'
    public init()
    public init(_: AnyMetatype)
    public init?<U>(casting: Type<U>)
}

There will be no === operator for Type<T>, because it does not add value.
Type<T> is a wrapper of typeless identifier with value semantics. It is
singleton pattern that makes us use classes.
​
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160715/29416e08/attachment.html>


More information about the swift-evolution mailing list