[swift-users] Custom operators in a framework

Rien Rien at Balancingrock.nl
Sat Feb 4 01:04:30 CST 2017


Facepalm!

Of course!, thanks for clearing that up!

I will file a bug report for the diagnostics.

Regards,
Rien

Site: http://balancingrock.nl
Blog: http://swiftrien.blogspot.com
Github: http://github.com/Balancingrock
Project: http://swiftfire.nl





> On 04 Feb 2017, at 02:14, Jordan Rose <jordan_rose at apple.com> wrote:
> 
> Interesting. I actually see two errors:
> 
> /Users/jrose/Desktop/SwifterJSON/App/AppDelegate.swift:19:18: error: ambiguous operator declarations found for operator
>     json["root"] &= 4
>                  ^
> <unknown>:0: note: found this matching operator declaration
> <unknown>:0: note: found this matching operator declaration
> /Users/jrose/Desktop/SwifterJSON/App/AppDelegate.swift:19:18: error: operator is not a known binary operator
>     json["root"] &= 4
>                  ^
> 
> which actually seems correct in retrospect: '&=' is already a valid operator in the 'Swift' library, and you're redefining it rather than just reusing that definition. It works if I either remove your `infix operator &=` declaration (and leave all the implementations in place), or if I change to an operator that isn't already defined. Can you file a bug at bugs.swift.org for the lousy diagnostics, at least?
> 
> Jordan
> 
> 
>> On Feb 3, 2017, at 11:34, Rien <Rien at Balancingrock.nl> wrote:
>> 
>> This is the “defining” package/module:
>> 
>> https://github.com/Balancingrock/SwifterJSON
>> 
>> For the consuming package simply generate a new executable and put the following in main.swift:
>> 
>> 
>> import SwifterJSON
>> 
>> 
>> // Note: Error disappears when the line below is un-commented
>> 
>> // infix operator &=
>> 
>> var json = VJson()
>> 
>> json["root"] &= 4
>> 
>> print(json.code)
>> 
>> 
>> (seems I have hit a snag with github, otherwise I would create a new repo for the executable… sorry for that.)
>> 
>> Regards,
>> Rien
>> 
>> Site: http://balancingrock.nl
>> Blog: http://swiftrien.blogspot.com
>> Github: http://github.com/Balancingrock
>> Project: http://swiftfire.nl
>> 
>> 
>> 
>> 
>> 
>>> On 03 Feb 2017, at 18:36, Jordan Rose <jordan_rose at apple.com> wrote:
>>> 
>>> The operator itself. If you’re not seeing that behavior, that’s a bug! Do you have a small test case that reproduces it? (I guess it would take two modules regardless, so either a SwiftPM package or an Xcode project would do it.)
>>> 
>>> Jordan
>>> 
>>>> On Feb 3, 2017, at 09:34, Rien <Rien at Balancingrock.nl> wrote:
>>>> 
>>>> Are you referring to the definition of the operator (infix…) or the availability of the function that defines the operator?
>>>> 
>>>> The functions are available, but I have to repeat the “infix…" everywhere I need them.
>>>> 
>>>> I.e. I have a:
>>>> 
>>>> infix operator &=
>>>> 
>>>> And when I use that from another module I get “Operator is not a known binary operator”
>>>> 
>>>> Once I repeat the "infix operator &=“ at the start of the file it works fine.
>>>> 
>>>> Regards,
>>>> Rien
>>>> 
>>>> Site: http://balancingrock.nl
>>>> Blog: http://swiftrien.blogspot.com
>>>> Github: http://github.com/Balancingrock
>>>> Project: http://swiftfire.nl
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>>> On 03 Feb 2017, at 18:14, Jordan Rose <jordan_rose at apple.com> wrote:
>>>>> 
>>>>> Operator declarations are actually public all the time, not internal. That’s itself probably a bug, but not the world-limiting one you’re concerned about.
>>>>> 
>>>>> Jordan
>>>>> 
>>>>> 
>>>>>> On Feb 3, 2017, at 01:18, Rien via swift-users <swift-users at swift.org> wrote:
>>>>>> 
>>>>>> It is possible to define custom operators in a framework, but it is not possible to assign access levels to them.
>>>>>> 
>>>>>> As a consequence they are module internal and cannot be used outside the framework.
>>>>>> 
>>>>>> Each project needs to redefine the custom operators in order to use them in that project.
>>>>>> 
>>>>>> What is the rationale behind that?
>>>>>> 
>>>>>> Or is it a bug?
>>>>>> 
>>>>>> Are there other ways to accomplish this?
>>>>>> 
>>>>>> Regards,
>>>>>> Rien
>>>>>> 
>>>>>> Site: http://balancingrock.nl
>>>>>> Blog: http://swiftrien.blogspot.com
>>>>>> Github: http://github.com/Balancingrock
>>>>>> Project: http://swiftfire.nl
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> swift-users mailing list
>>>>>> swift-users at swift.org
>>>>>> https://lists.swift.org/mailman/listinfo/swift-users
>>>>> 
>>>> 
>>> 
>> 
> 



More information about the swift-users mailing list