[swift-users] any wisdom about sharing "common" overloads/extensions in base libraries?

Howard Lovatt howard.lovatt at gmail.com
Wed Jun 21 01:27:18 CDT 2017


Jordon Rose from Apple said:

"It's tracked by SR-3908 <https://bugs.swift.org/browse/SR-3908>
. (The description's a little different but it's the same underlying
issue.)"


  -- Howard.

On 21 June 2017 at 12:07, David Baraff <davidbaraff at gmail.com> wrote:

>
> On Jun 20, 2017, at 6:59 PM, Howard Lovatt <howard.lovatt at gmail.com>
> wrote:
>
> There is a *bug* that the Swift people know about, but you are **meant**
> to be able to do this:
>
>
> Is there a plan to fix this?
> If it worked properly this would be quite wonderful.
>
>
>
> ModuleA
>
> A.swift
>
> public protocol P {
>
> func m() -> String
>
> }
>
> extension Int: P {
>
> public func m() -> String { return "AP.m" }
>
> }
>
> ModuleB
>
> B.swift
>
> public protocol P {
>
> func m() -> String
>
> }
> extension Int: P {
>
> public func m() -> String { return "BP.m" }
>
> }
>
> ModuleC
>
> A.swift
>
> import ModuleA
>
> func am(_ i: Int) -> String { return i.m() }
>
> B.swift
>
> import ModuleB
>
> func bm(_ i: Int) -> String { return i.m() }
>
> main.swift
>
> let i = 0
>
> print(am(i))
> print(bm(i))
>
>
>   -- Howard.
>
> On 21 June 2017 at 00:02, David Baraff via swift-users <
> swift-users at swift.org> wrote:
>
>> I posted this on Apple’s developer forums, and someone suggested trying
>> this here.
>> Basically, see https://forums.developer.apple.com/thread/80349
>>
>> but in a nutshell: consider that a widely used class/struct (such as
>> CGPoint) is missing some “obvious” functionality [don’t debate that part,
>> just go with it for now], such as the ability to scale a point by a scalar
>> using * as an operator: so in my awesome library “GeometryBase” I write
>>
>>   public func * (left: CGPoint, right: double) -> CGPoint {
>>       return CGPoint(x: right*left.x, y: right*left.y)
>>   }
>>
>> Why public?  Well, of course, because I want to use library GeometryBase
>> in many apps or other libraries, and now this overload exists in only one
>> place.
>>
>> But other bright people have the same idea, and now I want to use their
>> libraries.  (some of them in my company, some of them not.)
>>
>> And now we’re stuck, because everyone is trying to make up for the same
>> (perceived) lack and everyone wants them public so that they don’t have to
>> keep sticking them in each library they write.
>>
>> This is not a made up situation: many people even within one company
>> trying to share code somewhat informally are going to write the same code
>> to make using CGPoint/Size/Rect easier, and now we can’t share anything
>> safely.
>>
>> Anybody got some good ideas what to do about this?
>>
>> [Same question could apply to adding extensions.]
>>
>>
>> _______________________________________________
>> swift-users mailing list
>> 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/20170621/f0081392/attachment.html>


More information about the swift-users mailing list