Як створити глобальну змінну?


123

У мене є глобальна змінна, яку потрібно поділити між моїми ViewControllers.

У Objective-C я можу визначити статичну змінну, але не можу знайти спосіб визначення глобальної змінної у Swift.

Ви знаєте спосіб це зробити?




ви можете визначити змінну або структуру поза класом, тоді ви зможете отримати доступ до цієї змінної в загальній програмі.
Чандні

Відповіді:


209

З офіційного посібника з програмування Swift :

Глобальні змінні - це змінні, які визначаються поза будь-яким контекстом функції, методу, закриття чи типу. Глобальні константи та змінні завжди обчислюються ліниво.

Ви можете визначити його у будь-якому файлі та отримати доступ до нього в поточному moduleмісці будь-де. Таким чином, ви можете визначити його десь у файлі поза будь-якої області. Немає потреби, staticі всі глобальні змінні обчислюються ліниво.

 var yourVariable = "someString"

Ви можете отримати доступ до цього з будь-якого місця в поточному модулі.

Однак вам слід уникати цього, оскільки глобальні змінні не корисні для стану програми та, головним чином, причини помилок.

Як показано в цій відповіді , у Swift ви можете їх інкапсулювати structта отримати доступ будь-де. Ви також можете визначити статичні змінні або константи в Swift. Інкапсулювати вstruct

struct MyVariables {
    static var yourVariable = "someString"
}

Ви можете використовувати цю змінну в будь-якому класі або в будь-якому місці

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

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

3
Ваша структура називається MyVariables, так MyViewStateвиглядає як помилка копіювання / вставки з stackoverflow.com/a/24868789/1187415 :)
Martin R

Дякую Мартіну Р. Так, я скопіював з нього код
кодестер

9
Якщо ви копіюєте код з іншої відповіді, то це слід вказати прямо (із посиланням на оригінальну відповідь). Порівняйте stackoverflow.com/help/referencing .
Martin R

1
Зрозумів дякую! Але чи є різниця між глобальною змінною та інкапсуляцією в структура?
czzhengkw

3
Чи не вважатимуться "MyVariables" глобальними? Як це має значення, якщо ми оголосимо її як глобальну структуру чи змінну?
Сатьям

15

Глобальні змінні, визначені за межами будь-якого методу чи закриття, можуть бути обмежені за допомогою приватного ключового слова.

import UIKit

// MARK: Local Constants

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

32
Константа ("нехай") не є змінною.
Майк Таверн

2
@MikeTaverne Ви маєте рацію, але можете ввести її як "var", тоді ця відповідь буде в порядку. swifttipsnet.wordpress.com/2016/09/11/…
Мілад Фарідня

4

якщо ви хочете використовувати його у всіх своїх класах, ви можете використовувати:

public var yourVariable = "something"

якщо ви хочете використовувати лише в одному класі, ви можете використовувати:

var yourVariable = "something"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.