Classes and structs are different things. Classes are passed by reference,
structs are passed by value with copy on write.

Strings and Arrays are structs, not classes.

On Sat, May 6, 2017 at 10:24 PM, Kelvin Ma <kelvin1...@gmail.com> wrote:

> I hear that a lot but why do all the official sources sound like
> copy-on-write is something you have to manually implement with a class and
> isUniquelyReferenced if it’s not an array or a string?
>
> On May 7, 2017, at 12:02 AM, Nate Birkholz <nbirkh...@gmail.com> wrote:
>
> Let me try one more time, my stupid phone keeps changing words.
>
> ACTUALLY, the struct is a pointer until it's written to, and is only
> copied on write.
>
> Sent from my iPhone, please excuse brevity and errors
>
> On May 6, 2017, at 9:59 PM, Nate Birkholz <nbirkh...@gmail.com> wrote:
>
> Oddly, until it's *written* you will be working with a pointer.
>
> Sent from my iPhone, please excuse brevity and errors
>
> On May 6, 2017, at 9:33 PM, Kelvin Ma via swift-users <
> swift-users@swift.org> wrote:
>
> If I have a “large” struct like
>
> struct Vertex
> {
>     let x:Double, y:Double
>     var r:Int, g:Int, b:Int
>     let s:Double, t:Double
>     var selected:Bool
> }
>
> and I want to pass it to a function without modifying it like
>
> func taxicab_distance(_ v1:Vertex, _ v2:Vertex) -> Double
> {
>     return v2.x - v1.x + v2.y - v1.y
> }
>
> Will the entire struct Vertex get copied and pushed onto the stack, or
> will only the relevant members be passed to the function?
>
> In other words, does the compiler know to optimize this call down to
>
> func taxicab_distance(v2x:Double, v1x:Double, v2y:Double, v1y:Double) ->
> Double
> {
>     return v2x - v1x + v2y - v1y
> }
>
> ?
>
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
>
>


-- 
Nate Birkholz
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to