[swift-users] Cannot pass immutable value as inout argument

Roderick Mann rmann at latencyzero.com
Tue Jan 16 18:37:28 CST 2018


Xcode can't properly parse the C header to show me the Swift signature, but if I try calling it like this:

    let p = lgs_notify_params_t(notify: lgs_notify_did_enter_background)
    lgs_notify(self.ctx, p)

I get this error:

Cannot convert value of type 'lgs_notify_params_t' to expected argument type 'UnsafePointer<lgs_notify_params_t>!'


> On Jan 16, 2018, at 13:22 , Jordan Rose <jordan_rose at apple.com> wrote:
> 
> You can do this if you don't write '&', which incorporates the caveat that you're not passing a stable address. But please file a bug anyway, because the diagnostic should tell you that!
> 
> Jordan
> 
> 
>> On Jan 16, 2018, at 13:10, Rick Mann via swift-users <swift-users at swift.org> wrote:
>> 
>> Is it not possible for Swift to treat C API const pointers as something that can take let arguments?
>> 
>> 
>> LGS_EXPORT bool lgs_notify(struct lgs_context_t* ctx, const lgs_notify_params_t* params);
>> .
>> .
>> .
>> let p = lgs_notify_params_t(...)
>> lgs_notify(self.ctx, &p)
>>                     ^Cannot pass immutable value as inout argument: 'p' is a 'let' constant
>> 
>> 
>> Why isn't the "const" in the C declaration enough to let Swift know it's const and just allow it to be a let?
>> 
>> -- 
>> 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