[swift-evolution] ability to derive a class from a struct or other value type

David Moore mooredev at me.com
Wed Jun 21 14:04:46 CDT 2017


This would be a bit counter-intutivie in my opinion, and it’s already possible with the language today. First of all, structs in Swift cannot be built upon. Rather, I believe the intention is to use protocols for such a task. That’s what the new Swift String and Substring structs do. The following code example demonstrates the intended behavior, without any additional language improvements.


protocol Foo {
    func a() -> Any?
}

extension Foo {
    func a() -> Any? {
        return nil
    }
}

struct ValueSemantics: Foo {}

class ReferenceSemantics: Foo {}


On Jun 21, 2017, 2:54 PM -0400, Mike Kluev via swift-evolution <swift-evolution at swift.org>, wrote:
> sorry if this was already discussed.
>
> proposing an ability to derive a class from a struct or another value type (e.g. enum).
> would make it easy to wrap value type in a reference type without explicit code:
>
> struct S {
>     var v: Int
>     func method() {}
>     static staticMethod() {}
> }
>
> class C: S {
> func otherMethod() {}
> // ...
> }
>
> let c = C()
>
> c.v = 1
> c.method()
> C.staticMethod()
> c.otherMethod()
>
> shall work as if i had a struct variable and all struct functions implemented in a class calling through that var:
>
> pseudo code:
>
> class C {
>
> // auto generated internally:
>     var `struct`: S
>
>     func method() {
>         `struct`.method()
>     }
>     static staticMethod() {
>         S.staticMethod()
>     }
> //---
>
> func otherMethod() {}
> }
>
> would also be nice to have ability to overload struct's methods:
>
> class C: S {
>     override func method() {
>         super.method()
>     }
> }
>
> and have struct initializators inherited:
>
> let c = C(struct initialization params)
>
> thoughts?
>
> Mike
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170621/26b96b15/attachment.html>


More information about the swift-evolution mailing list