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

Howard Lovatt howard.lovatt at gmail.com
Tue Jun 20 20:59:07 CDT 2017


There is a *bug* that the Swift people know about, but you are **meant** to
be able to do this:

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/44311cf0/attachment.html>


More information about the swift-users mailing list