> On Sep 11, 2016, at 6:12 PM, Tanner Nelson via swift-users 
> <swift-users@swift.org> wrote:
> 
> Hey Swift Users,
> 
> I was wondering how you all work around not being able to add stored 
> properties in extensions (especially protocol extensions).
> 
> I ran into an issue recently where I needed an internal stored variable for a 
> protocol, but I didn't want the conformer to worry about implementing the 
> variable.
> 
> I ended up using something like this to achieve the effect.
> 
>    extension MyProtocol {
>        private var address: String {
>            mutating get {
>                var id = ""
>                withUnsafePointer(to: &self) { id = "\($0)"}
>                return id

BTW, you can write `return withUnsafePointer(to: &self) { "\($0)" }` instead.

>            }
>        }
> 
>        var myStoredVar: Bool {
>            mutating get {
>                return _storage[address] ?? false
>            }
>            set {
>                _storage[address] = newValue
>            }
>        }
>    }
> 
> Obviously not ideal, but I don't see another way to achieve this besides 
> subclassing (which has its own problems for my situation).
> 
> Wondering if anyone has run into this and come up with a better solution or 
> other type of work around.

I don't have a better answer to this part.

This particular solution only works if it is ok for `_storage[address]` to 
potentially be reused by a new instance, though (if the old instance is 
deallocated and the new one is allocated in its place).

 - Daniel

> 
> Thanks!
> Tanner
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

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

Reply via email to