2016-01-03 15 views
28

staticキーワードを使ってちょっと混乱します。私たちが知っているように、は、というキーワードで不変オブジェクトを宣言します。テーブルビューセルのIDを宣言するのと同じように、その存続期間中はほとんど変更されません。 キーワードは、我々は"let"キーワードを使用して定数/不変体を迅速に定義する場合、 "static"キーワードの使用は何ですか?

static NSString *[email protected]"cellId"; 
のようないくつかの定数を宣言するために、静的な使用same.InのObjective Cをやらせるのに対し、

struct classConstants 
{ 
    static let test = "test" 
    static var totalCount = 0 
} 

:今のような構造体のいくつかの宣言で静的キーワードの使用は何ですか

さらに私は好奇心を持たせているの静的なのキーワードと一緒に keyw ord。誰でもこの静的キーワードを使用する場所を教えてもらえますか?もっと重要なのは、のスタティックがすばやく必要なのでしょうか?

+7

静的なものがわからない場合は、速やかに書き込みを開始する前にOOPの本をお読みになることをお勧めします。静的変数は、オブジェクトのすべてのインスタンス間で共有されています。const(let)の場合、それは単なる不変です。 –

+4

@DanielKrom:私の理解によると、静的を使用してCでObjective Cの定数を宣言しました。それ以上の知識だから、私は** let **と** static **は同じだと思った。 – Poles

+4

CとObjective-Cの静的定数は定数ではありません(定数を定義する場合を除き)、それはよくわからないかもしれませんし、知識がない人は誰も生まれていない、静的は一種のグローバル変数です –

答えて

59

私はあなたのためにそれらを打破します:

  • var:定数
  • staticを作成するために使用される:変数
  • letを作成するために使用さletまたはvar
  • のいずれかで type propertiesを作成するために使用されます

今すぐあなたが望むアウトを得るために組み合わせることができます:

  • static let key = "API_KEY":定数
  • static var cnt = 0であるtypeプロパティ:変数
  • let id = 0であるtypeプロパティ:定数
  • var price = 0:変数

だから、VARをすべてを総括してみましょうします静的で定義可能なスコープがない間に変更可能性を定義します。 static varを使用すると、作成したインスタンスの数を把握できますが、varだけをオブジェクトと異なる価格に使用したい場合があります。これで少しクリアされることを願っています。

コード例:

class MyClass{ 
    static let typeProperty = "API_KEY" 
    static var anotherTypeProperty = 0 
    var price = 9.99 
    let id = 5 
} 
+0

"' let': 'let'キーワードで宣言された定数" =>変数を作成するために使用されます。後で(つまりコンストラクタ内で)CONSTANTの定義と矛盾しています。 C#などの他の言語と比較すると、 'let'はC#' readonly'( 'const'ではなく)と同じです。 –

0

は、タイププロパティおよび/またはメソッドやクラスのプロパティおよび/またはメソッドの違いを参照するには、アップルのドキュメントからこの自明の例を見てください

class SomeClass { 
    static var storedTypeProperty = "Some value." 
    static var computedTypeProperty: Int { 
     return 27 
    } 
    class var overrideableComputedTypeProperty: Int { 
     return 107 
    } 
} 

静的プロパティは、グローバルにではなく、型に対してのみ宣言できます。つまり、Swiftのstaticプロパティ=== typeプロパティです。型プロパティを宣言するには、staticキーワードを使用する必要があります。

+0

静的なものを使って静的を説明しています。 OPは、その意味を本当に意識していません... – Honey

+2

@ asma22 ??キーワードstaticは、迅速かつC言語で全く異なる意味を持ちます。迅速な静的とは、「タイプ」(プロパティまたは機能)を意味します。 'static'と 'class'のプロパティまたは関数の違いは、 'class'プロパティまたは関数がオーバーライドできること、 'static'はowerridenできないことです。ほとんどの人が他の文脈で '静的'を使用するので、リンゴはキーワードが 'static'であっても説明のために 'type'という言葉を使用します。 – user3441734

+1

私はそれをアップヴォートできるので、あなたのコメントを回答してください... – Honey

12

静的変数は、クラスのすべてのインスタンスで共有されます。このサンプルを遊び場に投げてください:

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 

静的プロパティの変数を変更すると、そのプロパティは将来のすべてのインスタンスで変更されるようになりました。

+1

あなたの答えは上にあるべきです –

6

静的変数は、クラスのインスタンスではなく型に属します。型のフルネームを使用して静的変数にアクセスすることができます。

コード:

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 

希望、これはあなたを助けます...

1

"letキーワードは定数を定義するには、"(私のような)C#の背景から来ている初心者のために混乱しています。 C#用語では、 "let"を "readonly"変数と考えることができます。

How exactly does the “let” keyword work in Swift?への答え)

使用の両方staticlet私は定数を定義するletを使用するたびに一定の

public static let pi = 3.1416   // swift 

public const double pi = 3.1416;   // C# 
public static final double pi = 3.1416 // Java  

を定義するために、私はC#2のreadonlyを使用していますように、それは感じています。したがって、私はstaticletの両方を使用して、定数を迅速に定義します。

関連する問題