Переменные classа еще не поддерживаются.

Я начинаю свой проект с controllerа разделенного вида в качестве начального controllerа представления и автоматически запускаю его из раскадровки.

Как правило, приложение с этим пользовательским интерфейсом имеет один и только один controller с разделенным представлением в качестве пользователя root, поэтому я создаю статическую переменную в подclassе и устанавливаю ее при инициализации.

Поэтому я хочу попробовать это поведение быстро.

Я прочитал книгу руководства по языку Swift для iBook о свойствах типа (с ключевым словом static и class) и попробовал часть кода для задания:

import UIKit class SplitViewController: UISplitViewController { class func sharedInstance() -> SplitViewController { return SplitViewController.instance } class let instance: SplitViewController = nil init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) self.initialization() } init(coder aDecoder: NSCoder!) { super.init(coder: aDecoder); self.initialization() } func initialization() { SplitViewController.instance = self; } } 

но я выяснил, когда Xcode говорит, что ключевое слово classа для свойств типа еще не поддерживается.

ошибка в изображении

У вас было решение сделать это?

В Swift теперь есть поддержка статических переменных в classах. Это не совсем то же самое, что и переменная classа (поскольку они не наследуются подclassами), но это довольно близко:

 class X { static let y: Int = 4 static var x: Int = 4 } println(Xx) println(Xy) Xx = 5 println(Xx) 

Вложение структуры может работать очень хорошо в качестве обходного пути:

 class SomeClass { // class var classVariable: Int = 0 // "Class variables not yet supported." Weird. // Workaround: private struct SubStruct { static var staticVariable: Int = 0 } class var workaroundClassVariable: Int { get { return SubStruct.staticVariable } set { SubStruct.staticVariable = newValue } } } 

Свойство вычисленного типа SomeClass.workaroundClassVariable можно использовать, как если бы оно было сохраненным типом.

Кажется, возможно объявить переменные со статической продолжительностью хранения в области файлов (как в C):

 var sharedInstance: SplitViewController? = nil class SplitViewController: UISplitViewController { .... func initialization() { sharedInstance = self } } 

Мой предпочтительный метод состоит в том, чтобы просто использовать частный объем файла var вне classа, а затем реализовать class / статические getters и seters:

 private var _classVar: Int = 0; class SomeClass { public class var classVar: Int { get { return _classVar } set { _classVar = newValue } } } 

С Swift 1.2 (доступно с Xcode 6.3b1 и далее) поддерживаются static свойства и методы classа.

 class SomeClass { static var someVariable: Int = 0 } 

Использование модели singleton dispatch_once в Swift

Кажется, это лучший ответ, избегая использования глобальной переменной.

Решение, достаточно похожее на var в области файлов, но более настраиваемое и близкое к singleton, – это использовать структуру, которая поддерживает static var как свойство classа

 struct PersonSharedData { static var backstore = "" var data: String { get { return PersonSharedData.backstore } set { PersonSharedData.backstore = newValue } } } class Person { var shared=PersonSharedData() //<< pseudo class var var family: String { get { return shared.data } set { shared.data=newValue } } var firstname = "" var lastname = "" var sexe: Sexe = .Unknown } 

Хорошо, с решением Николая, который выполняет эту работу. Я публикую свои изменения в этой теме для информации

 var instance: SplitViewController? = nil class SplitViewController: UISplitViewController { class func sharedInstance() -> SplitViewController? { return instance; } init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) self.initialization() } init(coder aDecoder: NSCoder!) { super.init(coder: aDecoder); self.initialization() } func initialization() { instance = self } } 

и, например, в моем приложении appDelegate, я могу получить доступ к этому статическому методу, подобному этому

 SplitViewController.sharedInstance()!.presentsWithGesture = false 

Формулировка в этой ошибке в значительной степени подразумевает, что это будет языковой функцией в будущем.

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

Вы должны обернуть переменные classа внутри внутренней переменной struct

 class Store{ var name:String var address:String var lat:Int var long:Int init(name:String, address:String, lat:Int, long:Int){ self.name = name self.address = address self.lat = lat self.long=long } private struct FACTORY_INITIALIZED_FLAG { static var initialized: Bool = false static var myStoreList:[Store]? static func getMyStoreList()->[Store]{ if !initialized{ println("INITIALIZING") myStoreList = [ Store(name: "Walmart", address: "abcd", lat: 10, long: 20), Store(name: "JCPenny", address: "kjfnv", lat: 23, long: 34) ] initialized = true } return myStoreList! } } } var a = Store.FACTORY_INITIALIZED_FLAG.getMyStoreList() var b = Store.FACTORY_INITIALIZED_FLAG.getMyStoreList() // only prints INITIALIZING once 

Попробуй это:

 class var instance: SplitViewController { return nil } 

Он называется Type Property в Swift.

Вы определяете свойства типа с ключевым словом static. Для вычисляемых свойств типа для типов classов вы можете использовать ключевое слово classа, чтобы позволить подclassам переопределять реализацию суперclassа. В приведенном ниже примере показан синтаксис для хранимых и вычисленных свойств типа:

 struct SomeStructure { static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { return 1 } } enum SomeEnumeration { static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { return 6 } } class SomeClass { static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { return 27 } class var overrideableComputedTypeProperty: Int { return 107 } } 

Подробнее по ссылке ниже,

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID254

  • Установка средства Apple Link Link Conditioner
  • Переименование проекта xcode 4 и фактической папки
  • Использование фреймворков в инструменте командной строки
  • как создать круглую кнопку?
  • Как добавить точку останова в objc_exception_throw?
  • Xcode - установить средства командной строки
  • Неисправность кода Xcode 4 не работает
  • Как я могу рассчитать разницу между двумя датами?
  • Автоматическое форматирование источника Xcode
  • 'ld: warning: каталог не найден для опции'
  • «Использование необъявленного типа» в Swift, хотя тип является внутренним и существует в том же модуле
  • Interesting Posts

    Как сохранить видео в VLC с использованием фильтров

    Включая другой class в SCSS

    Почему этот файл Excel продолжает запрашивать сохранение?

    Android: автоматически выбирает debug / release Maps api key?

    Как установить JSTL? Абсолютный uri: http://java.sun.com/jstl/core не может быть разрешен

    Сделать функциональные клавиши вести себя как обычно на ноутбуке Lenovo

    Предложение «ИЛИ» в папках поиска Outlook 2007 – состав папок

    rails – «ВНИМАНИЕ: Невозможно проверить подлинность CSRF-токена» для запросов json

    Как отключить параметр «Использовать шлюз по умолчанию для удаленных сетей» в Windows 10?

    Поймите, как этот M.2 B + M Key SSD может работать через плату адаптера PCIe с 2 слотами (как 1 B, так и 1 М)?

    Есть ли способ поиска текста моей истории просмотров в Firefox?

    Как преобразовать массив байтов в шестнадцатеричную строку и наоборот?

    Как добавить коллекцию коллекций apache в Android Studio (Gradle)

    ОШИБКА: «keytool» не распознается как внутренняя или внешняя команда, операционная программа или командный файл

    Доступ к членам classа по указателю NULL

    Давайте будем гением компьютера.