[swift-users] Custom operators in a framework

Jordan Rose jordan_rose at apple.com
Fri Feb 3 19:14:15 CST 2017


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 <http://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 <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 <http://balancingrock.nl/>
> Blog: http://swiftrien.blogspot.com <http://swiftrien.blogspot.com/>
> Github: http://github.com/Balancingrock <http://github.com/Balancingrock>
> Project: http://swiftfire.nl <http://swiftfire.nl/>
> 
> 
> 
> 
> 
>> On 03 Feb 2017, at 18:36, Jordan Rose <jordan_rose at apple.com <mailto: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 <mailto: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 <http://balancingrock.nl/>
>>> Blog: http://swiftrien.blogspot.com <http://swiftrien.blogspot.com/>
>>> Github: http://github.com/Balancingrock <http://github.com/Balancingrock>
>>> Project: http://swiftfire.nl <http://swiftfire.nl/>
>>> 
>>> 
>>> 
>>> 
>>> 
>>>> On 03 Feb 2017, at 18:14, Jordan Rose <jordan_rose at apple.com <mailto: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 <mailto: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 <http://balancingrock.nl/>
>>>>> Blog: http://swiftrien.blogspot.com <http://swiftrien.blogspot.com/>
>>>>> Github: http://github.com/Balancingrock <http://github.com/Balancingrock>
>>>>> Project: http://swiftfire.nl <http://swiftfire.nl/>
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> swift-users mailing list
>>>>> swift-users at swift.org <mailto:swift-users at swift.org>
>>>>> https://lists.swift.org/mailman/listinfo/swift-users
>>>> 
>>> 
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170203/62dc14bd/attachment.html>


More information about the swift-users mailing list