Bagaimana cara membuat variabel global?


123

Saya memiliki variabel global yang perlu dibagikan di antara ViewControllers saya.

Di Objective-C, saya bisa mendefinisikan variabel statis, tapi saya tidak bisa menemukan cara untuk mendefinisikan variabel global di Swift.

Apakah Anda tahu cara melakukannya?




Anda dapat menentukan variabel atau struct di luar kelas maka Anda dapat mengakses variabel tersebut di aplikasi secara keseluruhan.
Chandni

Jawaban:


209

Dari panduan pemrograman Swift resmi :

Variabel global adalah variabel yang ditentukan di luar fungsi, metode, penutupan, atau konteks jenis apa pun. Konstanta dan variabel global selalu dihitung dengan malas.

Anda dapat menentukannya dalam file apa pun dan dapat mengaksesnya di modulemana saja saat ini . Jadi, Anda dapat menentukannya di suatu tempat di file di luar cakupan apa pun. Tidak perlu staticdan semua variabel global dihitung dengan malas.

 var yourVariable = "someString"

Anda dapat mengakses ini dari mana saja di modul saat ini.

Namun Anda harus menghindari ini karena variabel Global tidak baik untuk status aplikasi dan terutama alasan bug.

Seperti yang ditunjukkan dalam jawaban ini , di Swift Anda dapat merangkumnya structdan dapat mengaksesnya di mana saja. Anda juga dapat menentukan variabel statis atau konstanta di Swift. Mengenkapsulasi dalamstruct

struct MyVariables {
    static var yourVariable = "someString"
}

Anda dapat menggunakan variabel ini di kelas mana pun atau di mana pun

let string = MyVariables.yourVariable
println("Global variable:\(string)")

//Changing value of it
MyVariables.yourVariable = "anotherString"

3
Struct Anda dipanggil MyVariables, jadi MyViewStatesepertinya kesalahan salin / tempel dari stackoverflow.com/a/24868789/1187415 :)
Martin R

Terima kasih Martin R. ya saya telah menyalin kode dari itu
codester

9
Jika Anda menyalin kode dari jawaban lain maka Anda harus menyatakannya secara eksplisit (dengan tautan ke jawaban asli). Bandingkan stackoverflow.com/help/referencing .
Martin R

1
Oke, Terima kasih! Tetapi apakah ada perbedaan antara variabel global dan encapsulate in struct?
czzhengkw

3
Apakah "MyVariables" tidak akan dianggap global? Bagaimana itu membuat perbedaan jika kita mendeklarasikannya sebagai struct atau variabel global?
Satyam

15

Variabel global yang ditentukan di luar metode atau penutupan apa pun dapat dibatasi cakupannya dengan menggunakan kata kunci pribadi.

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"

32
Konstanta ("let") bukanlah variabel.
Mike Taverne

2
@MikeTaverne Anda benar tetapi Anda dapat memperkenalkannya sebagai "var" maka jawaban ini akan OK. swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia

4

jika Anda ingin menggunakannya di semua kelas Anda, Anda dapat menggunakan:

public var yourVariable = "something"

jika Anda ingin menggunakan hanya dalam satu kelas, Anda dapat menggunakan:

var yourVariable = "something"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.