[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