2016-09-02 4 views
0

신속하게 모든 클래스가 아닌 일부 클래스에서만 확장 기능을 표시하려면 어떻게해야합니까?iOS - 신속한 확장 기능을 선택적으로 표시합니다.

UIImage+filters.swift이라는 파일에 UIImage 확장을 추가했습니다. 이 프로젝트는 내 프로젝트 PhotoImagePhotosViewController의 두 클래스에서만 사용할 수 있습니다. 확장 프로그램이이 두 클래스에만 표시되기를 원합니다. 이것을 어떻게 할 수 있습니까?

+0

클래스 연장 점은 클래스의 모든 인스턴스 클래스를 확장하는 것이다. 귀하의 기능이 매우 구체적이어서 도우미 클래스에 더 적합한 것처럼 들립니다. –

답변

0

클래스/확장의 액세스 한정자는 외부 모듈과 모듈간에 권한을 분리하여 모든 유닛에서 일관되게 작동합니다. 즉, 클래스/확장을 앱/모듈 내부에서 액세스 할 수 있다고 선언 할 수 있으며 외부인이 액세스 할 수 없거나 모든 사람에게 공개되지 않는다고 선언 할 수 있습니다.

Swift3에는 새로운 액세스 한정자가 제공되지만 모듈/앱 내부에서는 부분적으로 액세스를 제한하지 않습니다.

0

Swift에는 "친구"클래스의 개념이 없습니다. 하지만 확장 프로그램에서 비공개를 사용하여 해킹 할 수 있습니다. 이 기능을 사용하려면 확장 클래스와 PhotoImage 및 PhotosViewController가 하나의 파일에 있어야합니다. UIImage 확장 기능에서 private를 사용하면 추가 된 함수는이 파일에만 표시되며 다른 파일에는 표시되지 않습니다.

PhotosViewController.swift

private extension UIImage 
{ 
    func applyFilter() 
    { 
    } 
} 


class PhotosViewController : UIViewController 
{ 
    // applyFilter function in visible in this class 
} 

AnotherViewController.swift

class PhotosViewController : UIViewController 
{ 
    // applyFilter function in NOT visible in this class 
}