不明确的类型名称错误

Posted

技术标签:

【中文标题】不明确的类型名称错误【英文标题】:Ambiguous type name error 【发布时间】:2015-05-21 14:59:42 【问题描述】:

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

“NSUserDefaults”中不明确的类型名称“代理”

以下代码

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

“代理”在此上下文中的类型查找不明确

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

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

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
        

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

    

我查找了文档,但没有任何参考可以在扩展中使用类。

对吗?

【问题讨论】:

项目在我的机器上克隆后编译得很好。您使用的是哪个版本的 Xcode?​​span> 版本 6.3.2 (6D2105) 嗯,目前使用 6.3.1 (6D1002)。也许新版本发生了一些变化,SwiftyUserDefaults 还没有更新。 我已经为主库添加了 .xcodeproj(目前只有 .xcodeproj 用于测试,但不是整个库) - 使用模板“Cocoa touch framework” take.ms/PFIxD 主文件没有任何变化,但是有错误:( 【参考方案1】:

您在目标 SwiftlyUserDefaultsTests 中编译了两次 SwiftlyUserDefaults.swift 文件:一次在 SwiftlyUserDefaults.framework(它是 SwiftlyUserDefaultsTests 的依赖项)中,一次在“编译源”构建阶段。

只需从 SwiftlyUserDefaultsTests 目标的“编译源”构建阶段中删除 SwiftlyUserDefaults.swift 文件,就可以开始了。

【讨论】:

我也有同样的问题,无法解决。你能帮我么? ***.com/questions/38500798/…

以上是关于不明确的类型名称错误的主要内容,如果未能解决你的问题,请参考以下文章

升级项目时发现错误:操作符“=”不明确且“ios”:不是类或命名空间名称

尝试子查询时出现不明确的列名错误

具有完全相同名称空间的不明确引用

错误“名称空间'System.Web'中不存在类型或名称空间名称'Script'”背后是不是有解释

错误 CS0234 名称空间“MvvmCross”中不存在类型或名称空间名称“Platforms”(您是不是缺少程序集引用?)

错误:类型名称“X”不存在于类型“Y”中