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