2014-10-11 4 views
2

최근에 Swift는 액세스 수정자를 소개했습니다. 내 AppDelegate private에 몇 가지 요소를 설정하는 것은 어떻습니까? 예를 들어, window과 같은 일부 ivars가 비공개가되기를 원했습니다. 컴파일러가 내가 "내부 클래스에 대한 public var 선언"이라는 경고를 표시하고 window 속성이 internal 일 것을 권장하기 때문에 그렇게 할 수 없습니다. 글쎄, 됐어. 나는 그렇게한다. 하지만 나중에 나도 그 변수에 액세스 할 수 있습니다. 설정 한 경우 :Swift에서 AppDelegate 변수의 캡슐화

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
appDelegate.window = nil // <- Accessible 

앱이 물론 충돌합니다. 그런 종류의 물건을 진짜로 보호 할 수있는 방법이 있습니까?

답변

1

나는 단지 링크를 게시하고 그것을 읽으라고 말하는 사람이 싫다. 그래서 요약하기 위해 최선을 다할 것이지만, 액세스 제어에 대한 자세한 설명과 연습을 원한다면이 기사를 읽으십시오. 빠른. 이 문서에서

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html

: 당신이 명시 적 액세스 수준을 직접 지정하지 않은 경우 "코드에서 모든 엔티티 (몇 가지 특정 예외를 제외하고,이 장에서 후술하는 바와 같이)는 내부의 기본 액세스 수준이 결과적으로 많은 경우에 코드에 명시적인 액세스 수준을 지정할 필요가 없습니다. "

따라서 일반적인 유스 케이스가 아니라면 appdelegate의 window 속성은 다음과 같습니다. 그것을 가지고 태어난 액세스 제어 변수를 사용하면됩니다.

+1

실제로 제가 이야기 한 것은 컴파일러가 AppDelegate ivars를 'private'로 설정하지 않기를 바랍니다. 경고는 원래 게시물에 명시된 것처럼 나타납니다. 그리고 그것은 문제입니다. –