유형 구성원에 대해 이야기 할 때 차이점 만 나타납니다. private
은 동일한 유형 정의 내의 다른 메소드에 대한 액세스를 제한하며 fileprivate
파일은 동일한 .swift
파일에있는 항목으로 액세스 할 수 있습니다.
최상위 수준 (형식 정의 외부)에있는 내용의 경우 private
및 fileprivate
은 정확히 동일하게을 수행합니다. 당신이
fileprivate extension Foo
{
var aa: Int
{
return aaa + 10
}
}
private extension Foo
{
var aaa: Int
{
return 20
}
}
을 쓸 때 그래서 당신은 정말 궁극적으로, 같은 프로토콜에있는 두 개의 확장은 하나의 확장으로 컴파일러에 의해 해결 얻을
fileprivate extension Foo
{
var aa: Int
{
return aaa + 10
}
}
fileprivate extension Foo
{
var aaa: Int
{
return 20
}
}
을 썼다.
fileprivate extension Foo
{
var aa: Int
{
return aaa + 10
}
var aaa: Int
{
return 20
}
}
두 개의 키워드이 retarded처럼, 어떤 스위프트 건축가 agree with you을 가지고 생각 생각합니다. 일부 스타일 가이드는 public
및 private
액세스 한정자 (물론 internal
수정 자도 있지만 기본적으로 하나만 사용)를 사용하는 것이 좋습니다. 일반적으로 파일 단위로 제한하므로 - 단위 또는 per-type 기초는 특히 유용하지 않다.
fileprivate
수정자를 사용해야하는 경우 private
수정자를 유형 범위 외부에서 사용하지 마십시오. 이 문맥에서 private
이 실제로 "fileprivate
"을 의미하므로 혼동스럽고 코드를 읽기가 더 어렵게 만듭니다.
흠 ... 내가 확장의 범위가 파일이기 때문입니다 경우 궁금해? vars를 확장자 대신 파일 개인 및 비공개 파일로 선언 한 경우에는 작동하지 않습니다. – Fogmeister
@ Fogmeister 맞아요. 변수에 접근 수정자를 추가하면, 작동하지 않습니다. 아마도 개인 확장이 의미가 없기 때문에 애플이 그랬을 것입니다. 개인 확장으로 선언 된 모든 것이 거기에서만 보일 수 있습니다. –
관련 항목 : http://stackoverflow.com/questions/39739813/private-vs-fileprivate-on-declaring-global-variables-consts-in-swift3, http://stackoverflow.com/questions/43054774/distinction-between -private-and-fileprivate-top-level-classes. –