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

Charlie Monroe charlie at charliemonroe.net
Wed Jun 21 14:08:23 CDT 2017


What happens when you pass C somewhere where S is required? Is that an error?

C() is S // Is this true or false?


If it's true, then you can pass a mutable instance somewhere let is used, if it's false, then it is really confusing...


> On Jun 21, 2017, at 8:29 PM, 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



More information about the swift-evolution mailing list