Подтвердить что ты не робот

Объявление глобальных переменных в Swift

Я хочу создать глобальный массив пользовательских объектов, к которым можно получить доступ во всем приложении (классы AppDelegate, ViewController, классы TableViewController и т.д.). Я исследовал способ сделать это, но не нашел ответа. Я попытался сделать массив доступным для всех, но я получаю сообщение об ошибке, которое говорит Declaring public variable from internal class, и когда я пытаюсь получить доступ к нему в другом файле, я получаю сообщение об ошибке Use of unresolved identifier 'arrayObjectives'

Как я могу сделать этот массив глобально доступным для всех файлов в приложении и где я бы создавал экземпляр этого массива?

4b9b3361

Ответ 1

Из Swift Язык программирования -

Глобальные переменные - это переменные, которые определяются вне любых функции, метода, закрытия или типа

Таким образом, вы можете просто объявить свою переменную в верхней части любого файла сразу после операторов import.

Однако я бы предложил вам серьезно пересмотреть. Как правило, глобальные переменные - это не очень хорошая идея. Вам лучше со свойствами на одноэлемент или с использованием инъекции зависимостей.

Второй вопрос: "Где я могу создать массив?" является частью причины, по которой глобальные переменные являются плохими, - их жизненный цикл недостаточно определен с точки зрения ваших других объектов. Синтаксис, который инициализируется при первом использовании, устраняет эту проблему.

Ответ 2

Вы можете установить глобальный массив таким образом:

import UIKit

var abc : String = String()

и вы можете получить к нему доступ в любом другом файле, например:

abc = "ABC"

Ответ 3

Попробуйте создать новый файл Swift с этим:

struct Constants {

  static let appName: String = "My App"

  struct Colors {

    static let colorTextStandard = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.3) //#000000

  }

  struct Data {

    static var myStrings = [String]()  // Yea, this is not a constant, but that alright...

  }

}

Затем вы можете обратиться к этим глобальным константам (или вы можете сделать их переменными), используя:

Constants.appName

или

Constants.Colors.colorTextStandard

или

Constants.Data.myStrings = [stringOne, stringTwo]

Ответ 4

Вот как я это сделал...

class MessageViewCell {
    struct MessageViewCellHeightCache {
        static var cache: [String:CGFloat] = Dictionary<String, CGFloat>()
    }
}

И я обратился к нему следующим образом:

MessageViewCell.MessageViewCellHeightCache.cache["first"] = 12.0