[swift-users] Lazy expression is ambiguous?
Rick Mann
rmann at latencyzero.com
Mon Sep 12 02:46:48 CDT 2016
> On Sep 12, 2016, at 00:02 , Quinn The Eskimo! via swift-users <swift-users at swift.org> wrote:
>
>
> On 12 Sep 2016, at 06:40, Jacob Bandes-Storch via swift-users <swift-users at swift.org> wrote:
>
>> I'd recommend filing a bug at bugs.swift.org.
>
> Agreed.
Done. https://bugs.swift.org/browse/SR-2616
> Also, you can work around this by adding a type.
>
> lazy var myQ: DispatchQueue = DispatchQueue(label: "Op", attributes: .concurrent)
Sure, it just didn't seem to make sense.
> Also, with regards this specific example, be aware that lazy properties aren’t guaranteed to be initialised only once. To quote “The Swift Programming Language”:
>
> If a property marked with the `lazy` modified is accessed by multiple
> threads simultaneously and the property has not yet been initialized,
> there is no guarantee that the property will be initialized only once.
>
> I’m struggling to think of a case where that limitation is acceptable in the context of a dispatch queue (-:
Thank you for that explanation. I had assumed lazy worked like static, which I understand uses dispatch_once under the hood. Would that be a reasonable thing for lazy to do?
In the end I didn't use a property for the queue, but rather just created it at point of use (I'm testing to see whether or not the enqueued blocks retain the queue; that's all I need).
--
Rick Mann
rmann at latencyzero.com
More information about the swift-users
mailing list