Eu começo meu projeto com um controlador de visualização dividida como controlador de visualização inicial e o inicio automaticamente a partir do storyboard.
Geralmente, um aplicativo com esta IU tem um e apenas um controlador de visualização dividida como root, então eu crio uma variável estática na subclasse e a defino quando a inicialização é feita.
Então, eu quero tentar esse comportamento com o swift.
Eu li o livro do guia da linguagem de programação Swift no iBook sobre propriedades de tipo (com a palavra-chave static e class) e tentei um pedaço de código para o trabalho:
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;
}
}
mas descobri quando o Xcode diz que a palavra-chave class para propriedades de tipo ainda não era suportada.
Você teve uma solução para fazer isso?
Respostas:
Swift agora tem suporte para variáveis estáticas em classes. Isso não é exatamente o mesmo que uma variável de classe (porque elas não são herdadas por subclasses), mas você chega bem perto:
fonte
class
palavra-chave só pode ser usada para propriedades computadas agora e estático é para todas as propriedades de tipo (em enum, class ou struct)Incorporar uma estrutura pode funcionar perfeitamente como uma solução alternativa:
A propriedade de tipo computado SomeClass.workaroundClassVariable pode então ser usada como se fosse uma propriedade de tipo armazenado.
fonte
Parece ser possível declarar variáveis com duração de armazenamento estático no escopo do arquivo (como em C):
fonte
private
.Meu método preferido é apenas usar um escopo de arquivo privado var fora da classe e, em seguida, implementar getters e setters class / static:
fonte
A partir do Swift 1.2 (disponível com o Xcode 6.3b1 e posterior),
static
as propriedades e métodos da classe são suportados.fonte
class
variável ou há uma distinção (costumava serstatic
para structs,class
para classes)?static
é um alias paraclass final
.Usando um modelo singleton dispatch_once em Swift
Parece ser a melhor resposta até o momento, evitando o uso de uma variável global.
fonte
Uma solução bastante semelhante do que var no escopo do arquivo, mas mais personalizável e próxima do singleton, é usar uma estrutura que suporte var estático como propriedade de classe
fonte
Ok, com a solução do Nikolai que faz o trabalho. Eu posto minhas mudanças neste tópico para informações
e por exemplo, em meu appDelegate, posso acessar este método estático como este
fonte
O texto do erro implica fortemente que este será um recurso de idioma no futuro.
Você pode querer recorrer temporariamente à declaração de uma variável de propriedade no Delegado do Aplicativo e recuperá-la de lá. Não é o ideal, definitivamente um antipadrão, mas daria a você um local central para recuperar o
UISplitViewController
quando necessário.fonte
Você tem que envolver as variáveis de classe dentro de uma variável de estrutura interna
fonte
Experimente isto:
fonte
É chamado de propriedade de tipo no Swift.
Leia mais no link abaixo,
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID254
fonte