Swiftでstaticキーワードを使用することについて少し混乱しています。知っているように、Swiftはletキーワードを導入して不変オブジェクトを宣言します。おそらく、その存続期間中に変更されないテーブルビューセルのIDを宣言するようなものです。ここで、構造体の宣言でstaticキーワードを使用すると次のようになります。
struct classConstants
{
static let test = "test"
static var totalCount = 0
}
一方、letキーワードは同じことを行います。ObjectiveCでは、staticを使用して次のような定数を宣言します。
static NSString *cellIdentifier=@"cellId";
それに加えて、letおよびvarキーワードと一緒にstaticキーワードを使用することも興味をそそります。誰がこの静的キーワードを使用するかを説明できますか?さらに重要なのは、Swiftで本当に必要なのはstaticですか?
私はあなたのためにそれらを分解します:
var
:変数の作成に使用let
:定数の作成に使用static
:let
またはvar
のいずれかで type properties を作成するために使用されます。これらは、クラスのすべてのオブジェクト間で共有されます。これで、目的の結果を得るために組み合わせることができます。
static let key = "API_KEY"
:定数のタイププロパティstatic var cnt = 0
:変数であるtypeプロパティlet id = 0
:定数(一度だけ割り当てることができますが、実行時に割り当てることができます)var price = 0
:変数だから、すべてをvarにまとめて、静的で定義スコープの欠如の間に可変性を定義させます。 static var
を使用して作成したインスタンスの数を追跡し、オブジェクトごとに異なる価格でvar
のみを使用することもできます。これが少し物事をクリアすることを願っています。
サンプルコード:
class MyClass{
static let typeProperty = "API_KEY"
static var instancesOfMyClass = 0
var price = 9.99
let id = 5
}
let obj = MyClass()
obj.price // 9.99
obj.id // 5
MyClass.typeProperty // "API_KEY"
MyClass.instancesOfMyClass // 0
静的変数は、クラスのすべてのインスタンスを通じて共有されます。遊び場でこの例を投げます:
class Vehicle {
var car = "Lexus"
static var suv = "Jeep"
}
// changing nonstatic variable
Vehicle().car // Lexus
Vehicle().car = "Mercedes"
Vehicle().car // Lexus
// changing static variable
Vehicle.suv // Jeep
Vehicle.suv = "Hummer"
Vehicle.suv // Hummer
静的プロパティの変数を変更すると、そのプロパティは将来のすべてのインスタンスで変更されるようになりました。
静的変数は、クラスのインスタンスではなく型に属します。型の完全な名前を使用して、静的変数にアクセスできます。
コード:
class IOS {
var iosStoredTypeProperty = "iOS Developer"
static var swiftStoredTypeProperty = "Swift Developer"
}
//Access the iosStoredTypeProperty by way of creating instance of IOS Class
let iOSObj = IOS()
print(iOSObj.iosStoredTypeProperty) // iOS Developer
//print(iOSObj.swiftStoredTypeProperty)
//Xcode shows the error
//"static member 'swiftStoredTypeProperty' cannot be used on instance of type IOS”
//You can access the static property by using full name of the type
print(IOS.swiftStoredTypeProperty) // Swift Developer
これがお役に立てば幸いです。
型プロパティおよび/またはメソッドとクラスプロパティおよび/またはメソッドの違いを確認するには、Apple docsからこの自明の例を見てください
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
}
静的プロパティは、型ではなくグローバルに宣言できます。言い換えると、Swiftの静的プロパティ=== typeプロパティです。型プロパティを宣言するには、静的キーワードを使用する必要があります。
"letキーワードは定数を定義します"は、C#のバックグラウンド(私のような)から来た初心者にとって混乱を招きます。 C#の用語では、「let」を「readonly」変数と考えることができます。
( 「let」キーワードはSwiftでどのように機能しますか? )
static
とlet
の両方を使用して定数を定義します
public static let pi = 3.1416 // Swift
public const double pi = 3.1416; // C#
public static final double pi = 3.1416 // Java
let
を使用して定数を定義するたびに、C#のreadonly
を使用しているように感じます。したがって、static
とlet
の両方を使用して、Swiftで定数を定義します。