Предотвращает ли модификатор личного доступа 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

Частные методы пока недоступны.

Другие вопросы по тегам