Metode kelas (atau statis) di Objective-C diselesaikan dengan menggunakan +deklarasi.
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
Bagaimana ini bisa dicapai di Swift?
Metode kelas (atau statis) di Objective-C diselesaikan dengan menggunakan +deklarasi.
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
Bagaimana ini bisa dicapai di Swift?
Jawaban:
Mereka disebut sifat jenis dan metode jenis dan Anda menggunakan classatau statickata kunci.
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
classkata kunci sebelum fungsi atau properti tipe yang dihitung.
Mereka disebut properti tipe dan metode tipe di Swift dan Anda menggunakan kata kunci kelas.
Mendeklarasikan metode kelas atau metode Jenis dengan cepat:
class SomeClass
{
class func someTypeMethod()
{
// type method implementation goes here
}
}
Mengakses metode itu:
SomeClass.someTypeMethod()
atau Anda dapat merujuk Metode dengan cepat
Tambahkan deklarasi dengan classif itu kelas, atau dengan staticif itu struktur.
class MyClass : {
class func aClassMethod() { ... }
func anInstanceMethod() { ... }
}
funckata kunci di sini?
Swift 1.1 tidak memiliki properti kelas yang disimpan. Anda bisa mengimplementasikannya menggunakan properti kelas penutupan yang mengambil objek terkait yang terikat ke objek kelas. (Hanya berfungsi di kelas yang diturunkan dari 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))
}
}
....
}
Tambahkan deklarasi dengan class atau static jika merupakan fungsi, atau dengan static jika merupakan properti.
class MyClass {
class func aClassMethod() { ... }
static func anInstanceMethod() { ... }
static var myArray : [String] = []
}