Thanks. Why generic function don not require memory allocate for inout variable, even if it is protocol type?
>Пятница, 26 мая 2017, 19:35 +03:00 от Guillaume Lessard ><gless...@tffenterprises.com>: > >In your example, the compiler needs a parameter of type Position. Car is a >type of Position, but they are not interchangeable. See below: > >> On May 26, 2017, at 00:33, Седых Александр via swift-users < >> swift-users@swift.org > wrote: >> >> protocol Position { >> var x: Double { getset } >> } >> >> struct Car: Position { >> var x: Double >> } >> >> func move(item: inout Position) { >> item.x += 1 >> } >> >> var car = Car(x: 50) > >var pos: Position = car > >move(item: &pos) // this works. >assert(pos.x == 51) // works > >The move function as you wrote it requires the memory representation of a >Position variable, which Car does not have; when you assign it to a Position >variable, the Car struct gets accessed through an indirection layer. (There >was a WWDC talk about this last year or the year before.) > >You may want a generic function instead: > >func move<P: Position>(item: inout P) { > item.x += 1 >} > >move(item: &car) // this works, since it’s now calling the generic function. >assert(car.x == 51) // works > >Cheers, >Guillaume Lessard >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users