Help us understand the problem. What is going on with this article?

Swiftにおける変数

1. 変数のスコープとは

スコープ(scope)とは変数の有効範囲を表します。
つまり、変数のスコープは変数が使える(生きている)有効範囲のことを表します。
一般的にはSwiftでは{}に囲まれた部分がスコープの範囲ですが

guard let s = some else {
    return
}
print(s)

のような例外もあります。

1-1. ローカル変数、グローバル変数、メンバ変数

一般的に変数にはローカル変数グローバル変数メンバ変数があります。
この2つの変数はスコープの範囲が異なります。

1-1-1. ローカル変数

ローカル変数はメソッド内で定義した変数です。ローカル変数のスコープの範囲は基本的には、その定義したメソッド内だけになります。

func viewDidLoad() {
    var localVariable: Int = 1
    localVariable += 5
}

上記の場合、ローカル変数であるlocalVariableのスコープの範囲はlocal関数内になります。

1-1-2. グローバル変数

グローバル変数はクラスの外側に定義した変数です。
ローカル変数は基本的には定義したメソッド内だけでしか使えませんが、グローバル変数は、メソッド、さらにはクラスも関係なく全ファイルからアクセスできる変数です。
便利な一方、予期せぬポイントで値を書き換えてしまうなどのバグが発生する可能性があります。また、グローバル変数はプログラムが終了するまでメモリが確保されるため多くのメモリを消費することになります。

var globalVariable: Int = 1
class ViewController: UIViewController {
    func viewDidLoad() {
        super.viewDidLoad() 
        globalVariable += 5
    }
}

上記のように、どこからでもグローバル変数にアクセスすることができます。

1-1-3. メンバ変数

メンバ変数はクラス内で定義される変数です。メンバ変数はインスタンス変数とも呼ばれ基本的にはインスタンス毎に生成されます。
スコープの範囲は基本的にクラス内になります。

class ViewController: UIViewController {
    var memberVariable: Int = 1
    func viewDidLoad() {
        super.viewDidLoad() 
        memberlVariable += 5
    }
}

IBOutletIBActionなどのUIコンポーネントなどの変数は、このメンバ変数で定義することがほとんどです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした