不明确的类型名称错误

Ambiguous type name error

我正在尝试重新编译 SwiftyUserDefaults(https://github.com/radex/SwiftyUserDefaults) 以添加 Carthage 支持,但在尝试编译时我看到以下错误:

Ambiguous type name 'Proxy' in 'NSUserDefaults'

以下代码

public func ?= (proxy: NSUserDefaults.Proxy, @autoclosure expr: () -> Any) {
    if !proxy.defaults.hasKey(proxy.key) {
        proxy.defaults[proxy.key] = expr()
    }
}

'Proxy' is ambiguous for type lookup in this context

public subscript(key: String) -> Proxy {
    return Proxy(self, key)
}

据我了解 - 问题出在 class 代理,它嵌入在扩展中。

public extension NSUserDefaults {
    class Proxy {
        private let defaults: NSUserDefaults
        private let key: String

        private init(_ defaults: NSUserDefaults, _ key: String) {
            self.defaults = defaults
            self.key = key
        }

        // MARK: Getters

        public var object: NSObject? {
            return defaults.objectForKey(key) as? NSObject
        }

        // ..................................       

    }
}

我已经查找过文档,但没有任何参考资料表明 class 可以用于扩展。

对吗?

您正在目标 SwiftlyUserDefaultsTests 中编译 SwiftlyUserDefaults.swift 文件两次:一次在 SwiftlyUserDefaults.framework(它是 SwiftlyUserDefaultsTests 的依赖),一次在 "Compile Source" 构建阶段。

只需从 SwiftlyUserDefaultsTests 目标的 "Compile Source" 构建阶段删除 SwiftlyUserDefaults.swift 文件,就可以开始了。