Swift 的私有访问修饰符是否会阻止 property/method 在运行时被访问?

Does Swift's private access modifier prevent the property/method being accessed at runtime?

This post表明Objective-C没有"real"私有方法或属性,这意味着即使你不在头文件中暴露它们,你仍然可以访问它们在运行时。 Swift 标记为 private 的属性和方法是否属于这种情况?

虽然编译器阻止您直接访问私有属性,但您仍然可以通过 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

暂时无法通过这种方式访问​​私有方法。