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
}
在另一个文件中,我们创建了一个实例。编译器不会让我们直接访问secretNumber
或password
,但是我们可以使用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
暂时无法通过这种方式访问私有方法。
This post表明Objective-C没有"real"私有方法或属性,这意味着即使你不在头文件中暴露它们,你仍然可以访问它们在运行时。 Swift 标记为 private
的属性和方法是否属于这种情况?
虽然编译器阻止您直接访问私有属性,但您仍然可以通过 Swift 的新生内省以只读方式访问它们的值。考虑一个有两个私有变量的结构:
// FileOne.swift
struct Secret {
private var password = "Password"
private var secretNumber = 42
}
在另一个文件中,我们创建了一个实例。编译器不会让我们直接访问secretNumber
或password
,但是我们可以使用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
暂时无法通过这种方式访问私有方法。