Los métodos de clase (o estáticos) en Objective-C se lograron usando +
declaraciones.
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
¿Cómo se puede lograr esto en Swift?
Los métodos de clase (o estáticos) en Objective-C se lograron usando +
declaraciones.
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
¿Cómo se puede lograr esto en Swift?
Respuestas:
Se denominan propiedades de tipo y métodos de tipo y se utilizan las palabras clave class
o 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
class
palabra clave antes de una función o una propiedad de tipo calculado.
Se denominan propiedades de tipo y métodos de tipo en Swift y usted usa la palabra clave class.
Declarar un método de clase o método de tipo en Swift:
class SomeClass
{
class func someTypeMethod()
{
// type method implementation goes here
}
}
Accediendo a ese método:
SomeClass.someTypeMethod()
o puede referir métodos en rápido
Anteponga a la declaración class
si es una clase o static
si es una estructura.
class MyClass : {
class func aClassMethod() { ... }
func anInstanceMethod() { ... }
}
func
palabra clave aquí?
Swift 1.1 no tiene propiedades de clase almacenadas. Puede implementarlo utilizando una propiedad de clase de cierre que recupera un objeto asociado vinculado al objeto de clase. (Solo funciona en clases 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))
}
}
....
}
Anteponga la declaración con class o static si es una función, o con static si es una propiedad.
class MyClass {
class func aClassMethod() { ... }
static func anInstanceMethod() { ... }
static var myArray : [String] = []
}