別のクラスを継承するクラスを作成します。このクラスは、異なるファイルにあります。
例えば:
Class1.Swift
class Class1
{
protected var
//Do Stuff
}
Class2.Swift
class Class2:Class1
{
//Do stuff
}
迅速に「保護された」変数/関数にアクセスするにはどうすればよいですか?
プライベート変数/関数を宣言するとき、そのクラスでのみ使用できます。 「fileprivate」を使用する場合、他のクラスは保存ファイルにClass1として存在します。私がやりたいことは、クラスを個別のファイルに保持し、Xcode内からグループを使用して、どのクラスがどのカテゴリに属しているかを知ることです。
そのためにinternal
を使用する必要がありますSwiftは(他の多くのプログラミング言語とは異なり)protected
キーワードを提供しません。)internal
のみがfileprivate
とpublic
間のアクセス修飾子:
内部アクセスにより、定義モジュールのソースファイル内でエンティティを使用できますが、そのモジュール外のソースファイルでは使用できません。通常、アプリまたはフレームワークの内部構造を定義するときに内部アクセスを使用します。
言語デザイナーがprotected
キーワード(または同等のもの)を提供しないことを選んだ理由についてもう少し説明する ブログ投稿 があります。
その理由のいくつかは
サブクラスは常に新しいパブリックメソッドまたはプロパティを介して「保護された」APIを公開できるため、実際の保護は提供されません。
また、拡張がprotected
プロパティにアクセスする必要があるかどうかが明確ではないため、拡張に関してはprotected
が問題を引き起こすという事実。
Swiftはprotected
アクセスを提供しませんが、それでも同様のアクセスを実現できますfileprivate
アクセス制御を使用して)。
親が宣言したのと同じファイル内のすべての子を宣言する必要があるということだけを覚えておく必要がある。
Animal.Swift
import Foundation
class Animal {
fileprivate var protectedVar: Int = 0
}
class Dog: Animal {
func doSomething() {
protectedVar = 1
}
}
OtherFile.Swift
let dog = Dog()
dog.doSomething()