Swift 计算属性的快速访问控制:为什么这样做?
我似乎对Swift中的访问控制修饰符有些误解。以下是我在操场上的代码:Swift 计算属性的快速访问控制:为什么这样做?,swift,class-visibility,Swift,Class Visibility,我似乎对Swift中的访问控制修饰符有些误解。以下是我在操场上的代码: class Something { private (set) var name :String { get { return "" } set {} } } var thing = Something(); thing.name = ""; 我的直觉和其他语言的经验告诉我,最后一行应该有编译器错误 然而,我从中学习的书指出,private意味着被修改的成员只能从同一个源文件访问 我是否可以
class Something {
private (set) var name :String {
get { return "" }
set {}
}
}
var thing = Something();
thing.name = "";
我的直觉和其他语言的经验告诉我,最后一行应该有编译器错误
然而,我从中学习的书指出,private意味着被修改的成员只能从同一个源文件访问
我是否可以安全地假设这种情况在大多数项目中通常都是错误的,这仅仅是因为我在操场上运行这段代码
私有成员只能从同一源文件访问的说法是否完全准确
然而,我正在学习的这本书指出,private意味着被修改的成员只能从同一源文件访问。
您的示例是从同一源文件访问它。有什么问题吗
在Swift 3中,
private
变为fileprivate
,允许从同一文件的任何位置进行访问thing.name=“”代码>被允许,因为它正在操场上运行。在操场外,这种特殊的顶级分配在大多数情况下都是非法的(也有例外!)
对“顶级代码”的构成及其适用范围的解释;来自Swift官方博客:
但是,在大多数Swift源代码中不允许使用顶级代码
文件夹。为清楚起见,任何未写入
函数体、类中的函数体或以其他方式封装的函数体
顶级的。我们有这个规则是因为如果允许顶级代码进入
你所有的文件,很难决定从哪里开始
节目
您会注意到,前面我们说过顶级代码不允许在
大多数应用程序的源文件。例外情况是一个名为
“main.swift”,其行为非常类似于游乐场文件,但它是构建的
使用应用程序的源代码。“main.swift”文件可以包含
顶级代码,以及与订单相关的规则也适用。在里面
实际上,在“main.swift”中运行的第一行代码是隐式的
定义为程序的主入口点。这允许
最小Swift程序为一行-只要该行在
“梅因·斯威夫特”
“私人会员只能从同一来源访问”对Swift 2完全准确Swift 3(Xcode 8 beta 6)更改了“私人,比较”的含义。@MartinR谢谢你,将你的评论作为答案发布,我会接受。我不想重复现有的答案:)–实际上你的问题对我来说并不清楚。你的最后一句话是正确的,那你为什么对此感到疑惑呢?你所说的“这种情况在大多数项目中通常是错误的”是什么意思?也可能重复或@MartinR:你是对的。我已经更新了我的答案,希望这个编辑应该足够了。