Предотвращает ли модификатор личного доступа Swift доступ к свойству / методу во время выполнения?
В этом посте показано, что Objective-C не имеет "настоящих" частных методов или свойств, что означает, что даже если вы не выставите их в заголовочном файле, вы все равно сможете получить к ним доступ во время выполнения. Так ли это в свойствах и методах Swift, помеченных private
?
1 ответ
Решение
Несмотря на то, что компилятор не позволяет напрямую обращаться к частным свойствам, у вас все еще есть доступ к их значениям только для чтения через зарождающийся самоанализ 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
Частные методы пока недоступны.