[swift-users] Protocol with instance var that's set on construction, otherwise read-only
Rick Mann
rmann at latencyzero.com
Tue Aug 2 19:01:02 CDT 2016
It complains if I make it a let because computed properties must be var. Because it's a protocol, it can't be stored (even though it can be stored in the conforming type).
If I make it { get }, I can't set it in the extensions init() method.
I guess I could make it private set (not sure of the syntax for that), but it still doesn't have let semantics.
> On Aug 2, 2016, at 16:28 , David Sweeris <davesweeris at mac.com> wrote:
>
> If I understand things correctly, you *can* make uuid a let because you’re allowed to set them (once) during init functions.
>
> - Dave Sweeris
>
>> On Aug 2, 2016, at 6:22 PM, Rick Mann via swift-users <swift-users at swift.org> wrote:
>>
>> I'm trying to define a protocol that has a read-only, immutable member "uuid" that can be set in the init() method, but I'm having trouble. I have this:
>>
>> protocol
>> Element
>> {
>> var uuid : { get }
>> }
>>
>> extension
>> Element
>> {
>> init(...)
>> {
>> self.uuid = ...
>> }
>> }
>>
>> I can't make it let, because they're computed.
>>
>> I'm realizing from other stuff that I really can't have the init(...) method in the extension, anyway. But I'd really like to be able to specify a let member in the protocol. What's the best way to have that effect?
>>
>> In my semantics, an Element has a uniquely-assigned uuid. It might be generated when the object is instantiated, or it might be deserialized from disk, but once that's done, it can never change. How do I express that?
>>
>> Thanks,
>>
>> --
>> Rick Mann
>> rmann at latencyzero.com
>>
>>
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
>
--
Rick Mann
rmann at latencyzero.com
More information about the swift-users
mailing list