相关疑难解决方法(0)

如何在Swift中使用命名空间?

该文档仅提到嵌套类型,但不清楚它们是否可以用作命名空间.我没有发现任何明确提到的命名空间.

macos ios swift

139
推荐指数
7
解决办法
7万
查看次数

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
查看次数

前缀扩展功能

在Swift中,不再需要为添加前缀,因为它们的模块充当命名空间.

前缀扩展功能怎么样?例如:

extension UIImage {

    public func hnk_hasAlpha() -> Bool { ... }

}
Run Code Online (Sandbox Code Playgroud)

一方面Swift不是动态的,因此冲突会产生编译错误.

但是,如果编译代码在未来的iOS/OS X版本中运行,其中添加了一个扩展方法,会发生什么?即使它们具有相同的签名,不同模块中的方法也会被视为不同的符号吗?

如果扩展类是NSObject子类或纯Swift类,它会有所不同吗?

macos naming-conventions ios swift

22
推荐指数
1
解决办法
2161
查看次数