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

David Baraff davidbaraff at gmail.com
Tue Jun 20 21:07:57 CDT 2017


> 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 <mailto: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 <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 <mailto:swift-users at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
> 
> 

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


More information about the swift-users mailing list