Swift Extension: same extension function in two Modules

前端 未结 2 1852
情书的邮戳
情书的邮戳 2020-12-09 08:20

Say I have a Framework called SwiftKit, which has a UIView\'s extension class method named someClassMethod and a property named someProperty within it:

// Sw         


        
2条回答
  •  伪装坚强ぢ
    2020-12-09 09:14

    Details

    • Swift 3, Xcode 8.1
    • Swift 4, Xcode 9.1
    • Swift 5.1, Xcode 11.2.1

    Problem

    frameworks SwiftFoundation and SwiftKit has the same names of the properties and functions

    decision

    Way1

    Use different names of the properties and functions

    // SwiftFoundation
    public extension UIView {
        public class func swiftFoundationSomeClassMethod() {
            print("someClassMethod from Swift Foundation")
        }
    
        public var swiftFoundationSomeProperty: Double {
            print("someProperty from Swift Foundation")
            return 0
        }
    }
    

    Way2

    Group the properties and functions

    // SwiftKit
    public extension UIView {
        public class SwiftKit {
            public class func someClassMethod() {
                print("someClassMethod from Swift Kit")
            }
    
            public var someProperty: Double {
                print("someProperty from Swift Kit")
                return 0
            }
        }
    
        var SwiftKit: SwiftKit { return SwiftKit() }
    }
    

    Result

    import UIKit
    import SwiftKit
    import SwiftFoundation
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            _ = view.SwiftKit.someProperty
            UIView.SwiftKit.someClassMethod()
    
            _ = view.swiftFoundationSomeProperty
            UIView.swiftFoundationSomeClassMethod()
        }
    }
    

    Project

    Your method

    SwiftFoundation.UIView.swiftFoundationSomeClassMethod()
    

    Your variant of using the namespaces is not correct because all UIView extensions from both frameworks are included in you UIView class. Look at image bellow, you can see SwiftKit class and swiftFoundationSomeClassMethod() inside SwiftFoundation. This can confuse other developers.

提交回复
热议问题