Métodos de classe (ou estáticos) em Objective-C foram realizados usando +em declarações.
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
Como isso pode ser alcançado no Swift?
Métodos de classe (ou estáticos) em Objective-C foram realizados usando +em declarações.
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
Como isso pode ser alcançado no Swift?
Respostas:
Eles são chamados de propriedades de tipo e métodos de tipo e você usa as palavras-chave classou static.
class Foo {
var name: String? // instance property
static var all = [Foo]() // static type property
class var comp: Int { // computed type property
return 42
}
class func alert() { // type method
print("There are \(all.count) foos")
}
}
Foo.alert() // There are 0 foos
let f = Foo()
Foo.all.append(f)
Foo.alert() // There are 1 foos
classpalavra - chave antes de uma função ou propriedade de tipo calculado.
Eles são chamados de propriedades de tipo e métodos de tipo em Swift e você usa a palavra-chave class.
Declarando um método de classe ou método de tipo em swift:
class SomeClass
{
class func someTypeMethod()
{
// type method implementation goes here
}
}
Acessando esse método:
SomeClass.someTypeMethod()
ou você pode consultar métodos rapidamente
Anexe a declaração com classse for uma classe ou com staticse for uma estrutura.
class MyClass : {
class func aClassMethod() { ... }
func anInstanceMethod() { ... }
}
funcpalavra - chave aqui?
O Swift 1.1 não tem propriedades de classe armazenadas. Você pode implementá-lo usando uma propriedade de classe de encerramento que busca um objeto associado vinculado ao objeto de classe. (Funciona apenas em classes derivadas de NSObject.)
private var fooPropertyKey: Int = 0 // value is unimportant; we use var's address
class YourClass: SomeSubclassOfNSObject {
class var foo: FooType? { // Swift 1.1 doesn't have stored class properties; change when supported
get {
return objc_getAssociatedObject(self, &fooPropertyKey) as FooType?
}
set {
objc_setAssociatedObject(self, &fooPropertyKey, newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
}
}
....
}
Anexe a declaração com class ou static se for uma função ou com static se for uma propriedade.
class MyClass {
class func aClassMethod() { ... }
static func anInstanceMethod() { ... }
static var myArray : [String] = []
}