Name collisions for extension methods from different frameworks

前端 未结 3 1159
伪装坚强ぢ
伪装坚强ぢ 2021-02-04 06:36

As a test, I created two frameworks. Both frameworks contain this extension:

public extension UIDevice {
    var extraInfo: UIDeviceExtraInfo {
        return U         


        
3条回答
  •  走了就别回头了
    2021-02-04 07:11

    Found this on a project where I have CryptoSwift and after that I was already "compiled" a propietary framework without source code only header files.

    So in this moment you have 3 options:

    1. Ask the providers to change their names
    2. Modify one of them (in this case crypto swift because it is open source and you can modify the name of the extensions, obviously not only in your code that calls it, but in the cloned dependency... which is a hasle if you need to upgrade dependencies)
    3. Change the name you call it so there is no error and know the internal you want to use, I did make an extension in this case of Data and copied what CryptoSwift did to my own file where the collision existed (so it take a local definition of the code):
    extension Data {
        public var myBytes: Array {
            return Array(self)
        }
    }
    

    See that now I have to change all the calls of my code to myBytes and that I have the source code to implement this call, so no more collisions even if you cant do 1 or 2 (because to much hasle). If you cant do any of the 3, I guess there is no solution.

    BY the way, it is unfortunate that swift doesn't support a way to disambiguate this on the language itself.

提交回复
热议问题