Swift的私有访问修饰符是否阻止在运行时访问属性/方法?

时间:2015-02-17 06:38:01

标签: security swift access-control

This post表明Objective-C没有“真正的”私有方法或属性,这意味着即使您没有在头文件中公开它们,您仍然可以在运行时访问它们。这是Swift属性和标有private的方法的情况吗?

1 个答案:

答案 0 :(得分:2)

虽然编译器阻止您直接访问私有属性,但您仍然可以通过Swift的新生内省对其值进行只读访问。考虑一个包含两个私有变量的结构:

// FileOne.swift
struct Secret {
    private var password = "Password"
    private var secretNumber = 42
}

在另一个文件中,我们创建一个实例。编译器不允许我们直接访问secretNumberpassword,但我们可以使用reflect来获取我们想要的内容:

// FileTwo.swift
var a = Secret()
var b = reflect(a)

for i in 0..<b.count {
    println("\(b[i].0): \(b[i].1.value)")
}
// password: Password
// secretNumber: 42

目前,这种方式无法访问私有方法。