전체 Swift book을 읽었으며 WWDC videos (모두 내가 진심으로 추천합니다)을 보았습니다. 내가 걱정하는 한 가지는 데이터 캡슐화입니다.스위프트의 데이터 캡슐화
class Stack<T>
{
var items : T[] = []
func push(newItem: T) {
items.insert(newItem, atIndex: 0)
}
func pop() -> T? {
if items.count == 0 {
return nil;
}
return items.removeAtIndex(0);
}
}
이 클래스는 스택을 구현하고, 어레이를 사용하여 구현한다
는 다음 (완전히 인위적인) 예를 고려한다. 문제는 items
입니다 (Swift의 모든 속성과 마찬가지로) public이므로 공개 API와 별도로 직접 액세스 (또는 돌연변이) 할 수 없습니다. curmudgeonly 오래된 C++ 녀석으로서, 이것은 나를 매우 심하게 만듭니다.
나는 사람들이 액세스 수정 자의 부족에 대해 슬퍼하는 것을보고, 나는 그들이이 문제를 직접적으로 다룰 것이라는 데 동의한다. (나는 그들이 Soon ™이 구현 될 것이라는 루머를 듣는다.) 나는 데이터 은닉을위한 몇 가지 전략이 무엇인지 궁금하다. 그들의 부재에서.
내가 놓친 것이 있습니까? 아니면 단순히이 언어에서 누락 된 것입니까?
가능한 복제본 : http://stackoverflow.com/q/24003918/1639670 – nathan
데이터 숨기기 - 프로토콜의 실제적인 절반 방법이 있습니다. 클래스를 외부 세계에 표시하고 클래스 자체 대신 전달하려는 모든 기능 및 요소로 프로토콜을 준수하게하십시오. 내가 말했듯이 이것은 대체가 아니지만 가시성 수정자가 끝날 때까지 작동합니다. 또한 이것은 좋은 디자인 패턴입니다 - 의존성 주입 –
"아무도 공용 API와 별도로 직접 액세스 (또는 돌연변이)하지 못하도록합니다."- "curmudgeonly old C++ guy"가 아닌 :-) 당신은 어떤 해를 끼치고 있습니까? 사람들이 원하는 방식으로 코드를 사용하지 못하도록 막지 않으면 어떻게 될까? 예를 들어 파이썬에는 "우리는 모두 성인입니다." 공개/비공개는 문서화 및 대회를 기반으로합니다. 누군가가 수업 내적으로 어떤 것을 피델라이하고 싶다면주의해야합니다. 아무도 내부 객체에 접근 할 충분한 이유가 없을 것이라고 모든 사람이 영원히 알 수있는 척하지 않습니다. – alcalde