swift - 消除跨 Swift 模块的初始化器歧义

标签 swift namespaces swift-extensions

This question让我发现了这个问题。

如果我在不同模块的同一个类中有两个具有相同签名的初始化器,我如何指定我想调用哪一个?要使用与该问题中相同的示例,假设我声明了一个像这样的便利初始值设定项:

extension UIStoryboard {
    convenience init(name: String, bundle: NSBundle?) {
        // ... do custom things ...

        // This line causes infinite recursion. (How) Can I specify which 
        // initializer I want to call? 
        self.init(name: name, bundle: bundle) 
    }
}

我假设这也将是两个扩展的问题,它们将具有相同签名的方法添加到同一类。

有没有办法解决这个问题?或者这只是一个错误?

最佳答案

您不能声明两个具有相同签名的扩展方法。尝试覆盖 Array 的下标方法,它不会让你。如果您想使用另一个更改签名的初始化器并让 API 的用户调用另一个初始化器。

关于swift - 消除跨 Swift 模块的初始化器歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26665539/

相关文章:

swift - 从一个 View Controller 访问一组图像到另一个 View Controller ,以添加滑动手势识别器

iOS 设计 : TableViews or Other?

iOS:如何在 swift 3 中选择并滚动到 collectionView 中的特定单元格?

php - 无法让我的自动加载器使用命名空间

swift - 无法在 swift 上扩展扩展添加的结构

swift - 协议(protocol)扩展中的 'where self' 是什么

ios - 是否可以从 Interface Builder 设置 MDC Collection View Cell?

C# - 在共享命名空间内跨文件使用命名空间

node.js - sinon stub 命名空间函数

ios - 应用扩展和主应用之间的共享文件