On Sep 6, 2016, at 21:31 , Gerriet M. Denkmann <gerr...@mdenkmann.de> wrote:
> 
> My Swift book (2.2) has no mention of “private” (Swift 3 beta has).

It’s in the 2.2 book under “Language Guide” section “Access Control"

> But even assuming I had Swift 3, I do not quite understand how this should be 
> done (I may be a bit dense).

It’s a bit of syntactical pseudo-magic, but it makes sense when you think about 
it.

If you have (say) an instance property:

        class X {
                var x: int
        }

then property x is both gettable and settable by clients of the class. If you 
declare it private:

        class X {
                private var x: int
        }

then (like Obj-C) the property is private and can only be used inside the 
class. But you can declare just the setter to be private, using this syntax:

        class X {
                private(set) var x: int
        }

In that case, you can freely change the value inside the class, but to clients 
of the class, it "looks like" the property is declared like this:

        class X {
                let x: int
        }

The Obj-C analog is to declare the property ‘readonly’ in the public interface 
in the .h file, and ‘readwrite’ in a private interface extension inside the .m 
file.

This use of ‘private(set)’ doesn’t prevent you from accidentally changing the 
value inside the class somewhere. If you want to do that, you’re going to have 
to get a bit more exotic, maybe a ‘lazy’ let.

In Swift 2, “private” actually means “accessible by everything in the same 
source file”. In Swift 3, that’s renamed to “fileprivate”, and “private” means 
“accessible only within the declaring class/struct”.
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to