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

Reply via email to