Global değişken nasıl oluşturulur?


123

ViewControllers'ım arasında paylaşılması gereken global bir değişkenim var.

Objective-C'de, statik bir değişken tanımlayabilirim, ancak Swift'de global bir değişkeni tanımlamanın bir yolunu bulamıyorum.

Bunu yapmanın bir yolunu biliyor musun?




sınıfın dışında değişken veya yapı tanımlayabilir, ardından bu değişkene genel uygulamada erişebilirsiniz.
Chandni

Yanıtlar:


209

Resmi Swift programlama kılavuzundan :

Global değişkenler, herhangi bir işlev, yöntem, kapanış veya tür bağlamının dışında tanımlanan değişkenlerdir. Global sabitler ve değişkenler her zaman tembel hesaplanır.

Herhangi bir dosyada tanımlayabilir ve mevcut moduleher yerden erişebilirsiniz . Böylece, herhangi bir kapsam dışında dosyada bir yerde tanımlayabilirsiniz. Gerek yoktur staticve tüm global değişkenler tembel hesaplanır.

 var yourVariable = "someString"

Buna mevcut modülün herhangi bir yerinden erişebilirsiniz.

Ancak, Global değişkenler uygulama durumu için iyi olmadığından ve esas olarak hataların nedeni olduğundan bundan kaçınmalısınız.

Bu cevapta gösterildiği gibi , Swift'de onları içine structalabilir ve her yerden erişebilirsiniz. Statik değişkenleri veya sabiti Swift'de de tanımlayabilirsiniz. Kapsüllemestruct

struct MyVariables {
    static var yourVariable = "someString"
}

Bu değişkeni herhangi bir sınıfta veya herhangi bir yerde kullanabilirsiniz

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

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

3
Sizin yapı denir MyVariablesböylece, MyViewStatebir kopyası gibi görünüyor / dan hatayı yapıştırmak stackoverflow.com/a/24868789/1187415 :)
Martin R

Teşekkürler Martin R. evet kodu ondan kopyaladım
kodlayıcı

9
Kodu başka bir yanıttan kopyalarsanız, bunu açıkça belirtmelisiniz (orijinal cevaba bir bağlantıyla). Stackoverflow.com/help/referencing ile karşılaştırın .
Martin R

1
Anladım, teşekkürler! Ancak küresel değişken ile yapı içinde kapsülleme arasında herhangi bir fark var mı?
czzhengkw

3
"Değişkenlerim" global olarak kabul edilmeyecek mi? Global yapı veya değişken olarak ilan etmemiz nasıl bir fark yaratır?
Satyam

15

Herhangi bir yöntemin veya kapanışın dışında tanımlanan global değişkenler, private anahtar sözcüğü kullanılarak kapsam sınırlandırılabilir.

import UIKit

// MARK: Local Constants

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

32
Sabit ("let") bir değişken değildir.
Mike Taverne

2
@MikeTaverne Haklısınız ama bunu "var" olarak tanıtabilirsiniz, o zaman bu cevap tamam olacaktır. swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia

4

tüm sınıflarınızda kullanmak istiyorsanız kullanabilirsiniz:

public var yourVariable = "something"

sadece bir sınıfta kullanmak istiyorsanız, kullanabilirsiniz:

var yourVariable = "something"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.