Objective-C'deki sınıf (veya statik) yöntemler +, bildirimlerde kullanılarak gerçekleştirildi .
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
Swift'de bu nasıl başarılabilir?
Objective-C'deki sınıf (veya statik) yöntemler +, bildirimlerde kullanılarak gerçekleştirildi .
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
Swift'de bu nasıl başarılabilir?
Yanıtlar:
Bunlar tür özellikleri ve tür yöntemleri olarak adlandırılır ve siz classveya staticanahtar sözcüklerini kullanırsınız.
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
classbir işlevden veya hesaplanmış bir tür özelliğinden önce anahtar sözcüğe ihtiyacınız yoktur .
Swift'de bunlara tür özellikleri ve tür yöntemleri denir ve siz class anahtar sözcüğünü kullanırsınız.
Swift'te bir sınıf yöntemi veya Tür yöntemi bildirmek:
class SomeClass
{
class func someTypeMethod()
{
// type method implementation goes here
}
}
Bu yönteme erişmek:
SomeClass.someTypeMethod()
veya Yöntemlere hızlı bir şekilde başvurabilirsiniz
Bildirimin başına bir sınıfsa classveya staticbir yapı ise ile ekleyin .
class MyClass : {
class func aClassMethod() { ... }
func anInstanceMethod() { ... }
}
funcBurada anahtar kelimeye ihtiyacınız yok mu?
Swift 1.1'in depolanmış sınıf özellikleri yoktur. Sınıf nesnesine bağlı ilişkili bir nesneyi getiren bir kapanış sınıfı özelliğini kullanarak uygulayabilirsiniz. (Yalnızca NSObject'ten türetilen sınıflarda çalışır.)
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))
}
}
....
}
Bildirimin başına bir işlevse sınıf veya statik, bir özellikse statik ekleyin.
class MyClass {
class func aClassMethod() { ... }
static func anInstanceMethod() { ... }
static var myArray : [String] = []
}