[swift-users] Stored Property on Protocol Extension

Tanner Nelson me at tanner.xyz
Sun Sep 11 20:12:53 CDT 2016


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
            }
        }

        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.

Thanks!
Tanner


More information about the swift-users mailing list