2014-08-27 43 views
3

在雨燕,它是一个编译错误,要做到这一点:你应该能够在具有相同名称的不同文件中声明两个私有变量吗?

// file1.swift 

private let testVar = 2 

// file2.swift 

private let testVar = 3 

特别是,声明人会用“的testvar的无效重复声明”强调。


documentation状态,一般认为:

私人接入限制使用的实体自身的定义源文件。使用私人访问来隐藏特定功能的实现细节。

在讨论原始值,它说:

在枚举定义用于任何原始值或相关值类型必须具有的访问级别至少高达枚举的访问级别。例如,不能将私有类型用作具有内部访问级别的枚举的原始值类型。

并相对于常量:

常量,变量或属性不能比它的类型的详细公开。例如,编写具有私有类型的公共属性是无效的。同样,下标不能比其索引类型或返回类型更公开。


对我来说,没有这些提取物的建议,你不应该能够有private变量在不同的文件相同的名称。

的确,第一句话对我说,你应该能够;否则,您正在泄漏实现细节(即,您使用名为testVar的变量)。


在我提交错误报告之前,我想检查一下,我没有误解语义。 这应该可能吗?

+1

似乎这个裹尸布是不允许的。只是在一个不同的文件是不够的。考虑链接时间。 – zaph 2014-08-27 12:27:56

+1

@Zaph我认为它的工作方式与C中的静态变量相同(即不暴露给链接器)。看起来很奇怪,你可以通过向项目添加一个新文件来打破你的构建! – sapi 2014-08-27 12:43:37

+0

我想这涉及私人处理。提交bug并查看响应是什么。 – zaph 2014-08-27 12:49:11

回答

2

这已被固定在Xcode 6.1的β2:

问题在Xcode 6解决。1个测试版

斯威夫特语言

具有相同的名称和相同类型的私人实体会如果不同的文件中定义的同一模块内不再冲突。 (17632175)

0

雨燕文档状态:

默认情况下,变量,常量和其他命名的声明是在源文件中的顶级声明是代码访问在每一个源文件的一部分相同的模块。

您需要将文件放在不同的模块中,或者在一个类中定义变量的范围。

+0

但它*还*规定'私人访问限制了一个实体对其自己的定义源文件的使用,并且通常具体将覆盖一般作为构造的问题,尤其是当你发布的内容被表示为默认规则。 – sapi 2014-09-04 22:07:52

+0

你是对的 - 他们不符合规范 – 2014-09-06 15:55:26

相关问题