相关疑难解决方法(0)

52
推荐指数
2
解决办法
9805
查看次数

Swift扩展:两个模块中的相同扩展功能

假设我有一个名为SwiftKit的框架,它有一个名为someClassMethod的UIView扩展类方法和一个名为someProperty的属性:

// SwiftKit
public extension UIView {
    class func someClassMethod() {
        print("someClassMethod from Swift Kit")
    }

    var someProperty: Double {
        print("someProperty from Swift Kit")
        return 0
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个名为SwiftFoundation的框架,它还有一个名为someClassMethod的UIView扩展类方法和一个名为someProperty的属性:

// SwiftFoundation
public extension UIView {
    class func someClassMethod() {
        print("someClassMethod from Swift Foundation")
    }

    var someProperty: Double {
        print("someProperty from Swift Foundation")
        return 0
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个项目介绍这些框架,事情是,如果我在同一个swift文件中导入它们并访问这些扩展,我得到了"不明确使用someProperty/someClassMethod()"错误,即使我指定了调用SwiftKit.UIView.someClassMethod()的形式:

import UIKit
import SwiftKit
import SwiftFoundation

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the …
Run Code Online (Sandbox Code Playgroud)

namespaces swift swift-extensions

24
推荐指数
1
解决办法
4664
查看次数

命名来自不同框架的扩展方法的冲突

作为测试,我创建了两个框架.两个框架都包含此扩展:

public extension UIDevice {
    var extraInfo: UIDeviceExtraInfo {
        return UIDeviceExtraInfo()
    }
}

public class UIDeviceExtraInfo {
    public var prop: String = "Device1"  //"Device2" is used in another framework
}
Run Code Online (Sandbox Code Playgroud)

然后我导入了两个框架并尝试打印UIDevice.currentDevice().extraInfo.prop.Swift编译器给出错误:Ambiguous use of extraInfo".

如何解决这样的名字冲突?

namespaces ios swift swift-extensions

13
推荐指数
2
解决办法
2421
查看次数