0

これは非常に基本的なことなので、尋ねられたと確信していますが、見つかりません。

私は迅速な 3 プレイグラウンドで実験を行っており、このコードを実行したいと考えています。

import UIKit

var optionalVariable: Int? = 32
var anotherVariable: Int
if optionalVariable != nil{
    print("This executed")
    anotherVariable = 32
}
print(anotherVariable)

実行に失敗し、次のエラーが発生します。

Playground execution failed: error: chapter4.playground:5:7:
error: variable 'anotherVariable' used before being initialized
print(anotherVariable)

では、何が問題なのですか?anotherVariable値を割り当てたのにの値を使用できないのはなぜですか?

最後の行をコメントアウトするprint(anotherVariable)と、コードが実行され、出力はThis executed.

4

3 に答える 3

2

Swift には鉄則があります。変数は、その値を使用する前に初期化する必要があります。


この線

var anotherVariable: Int

変数を宣言しますが、初期化はしません。

optionalVariablenil の場合、anotherVariable初期化されず、クラッシュが発生します。コンパイラはコンパイル時にそれを検出し、エラー メッセージを表示できます。


デフォルト値を割り当てるか、宣言行を次のように変更します

var anotherVariable = 10 // or 0 or whatever

elseまたは条項を追加する

var optionalVariable: Int? = 32
var anotherVariable: Int
if optionalVariable != nil{
    print("This executed")
    anotherVariable = 32
} else {
    anotherVariable = 10
}
print(anotherVariable)
于 2016-11-10T14:44:16.123 に答える
1

あなたの変数は Int として宣言されています

var anotherVariable: Int

問題は、変数を印刷するときに初期化されていない可能性があることです(optionalVariableisの場合nil)。にIntは値が必要であり、オプションの型でない限り、コンパイラはデフォルト値を設定しません。printすべてのタイプまたはクラスは、最初に使用する前に値を持つ必要があります。これが、行にコメントしたときにエラーが発生しなかった理由です。

それを修正するには、2 つの選択肢があります。

  • anotherVariable宣言で初期化することにより、ある時点で初期化されていることを確認してください

    var anotherVariable: Int = 0
    

    または場合によってはそうelseする

    if optionalVariable != nil{
        print("This executed")
        anotherVariable = 32
    }
    else {
        anotherVariable = 0
    }
    
  • またはanotherVariableオプションにする(として宣言するInt?

    var anotherVariable: Int?
    

    そうすればnilデフォルトです。それは同じです

    var anotherVariable: Int? = nil
    

C から来た場合、変数に以前の割り当てからの値が含まれるいくつかのエッジ ケースを防ぐためです。

于 2016-11-10T14:48:45.563 に答える