迅速に、すべてではなく少数のクラスのみに拡張機能を表示するにはどうすればよいですか?
というファイルの UIImage に拡張子を追加しましたUIImage+filters.swift
。この拡張機能は、プロジェクトの 2 つのクラスPhotoImage
とPhotosViewController
. これらの 2 つのクラスにのみ拡張機能が表示されるようにします。どうすればこれを達成できますか?
迅速に、すべてではなく少数のクラスのみに拡張機能を表示するにはどうすればよいですか?
というファイルの UIImage に拡張子を追加しましたUIImage+filters.swift
。この拡張機能は、プロジェクトの 2 つのクラスPhotoImage
とPhotosViewController
. これらの 2 つのクラスにのみ拡張機能が表示されるようにします。どうすればこれを達成できますか?
それは不可能です。クラス/拡張機能のアクセス修飾子は、すべてのユニットで一貫して動作し、外部モジュールとそれらが存在するモジュールの間で特権を分離します。つまり、クラス/拡張機能がアプリ/モジュール内でアクセス可能であり、部外者にはアクセスできない、またはすべての人に表示されないように宣言できることを意味します。
Swift3
新しいアクセス修飾子が付属していますが、モジュール/アプリ内で部分的にアクセスを制限するものはありません。
Swift には「フレンド」クラスという概念はありません。ただし、拡張機能で private を使用することで、ハッキングすることができます。これが機能するには、拡張クラスと PhotoImage および PhotosViewController が 1 つのファイルに含まれている必要があります。UIImage 拡張機能で private を使用すると、追加された関数はこのファイルでのみ表示され、他のファイルでは表示されません。
PhotosViewController.swift
private extension UIImage
{
func applyFilter()
{
}
}
class PhotosViewController : UIViewController
{
// applyFilter function in visible in this class
}
別のViewController.swift
class PhotosViewController : UIViewController
{
// applyFilter function in NOT visible in this class
}