เมธอดคลาส (หรือแบบคงที่) ใน Objective-C สามารถทำได้โดยใช้+
ในการประกาศ
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
สิ่งนี้จะทำได้อย่างไรใน Swift
เมธอดคลาส (หรือแบบคงที่) ใน Objective-C สามารถทำได้โดยใช้+
ในการประกาศ
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
สิ่งนี้จะทำได้อย่างไรใน Swift
คำตอบ:
พวกเขาจะเรียกคุณสมบัติประเภทและวิธีการประเภทและคุณใช้class
หรือ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
คีย์เวิร์ดก่อนฟังก์ชันหรือคุณสมบัติประเภทที่คำนวณ
พวกเขาเรียกว่าคุณสมบัติประเภทและวิธีการพิมพ์ใน Swift และคุณใช้คีย์เวิร์ดคลาส
การประกาศเมธอดคลาสหรือเมธอด Type อย่างรวดเร็ว:
class SomeClass
{
class func someTypeMethod()
{
// type method implementation goes here
}
}
การเข้าถึงวิธีการนั้น:
SomeClass.someTypeMethod()
หรือคุณสามารถอ้างอิงวิธีการได้อย่างรวดเร็ว
นำหน้าการประกาศด้วยclass
if เป็นคลาสหรือด้วยstatic
ถ้าเป็นโครงสร้าง
class MyClass : {
class func aClassMethod() { ... }
func anInstanceMethod() { ... }
}
func
คำหลักที่นี่หรือ?
Swift 1.1 ไม่มีคุณสมบัติของคลาสที่เก็บไว้ คุณสามารถใช้งานได้โดยใช้คุณสมบัติคลาสการปิดที่ดึงอ็อบเจ็กต์ที่เชื่อมโยงกับคลาสอ็อบเจ็กต์ (ใช้ได้เฉพาะในคลาสที่มาจาก 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))
}
}
....
}
นำหน้าการประกาศด้วยคลาสหรือแบบคงที่ถ้าเป็นฟังก์ชันหรือแบบคงที่ถ้าเป็นคุณสมบัติ
class MyClass {
class func aClassMethod() { ... }
static func anInstanceMethod() { ... }
static var myArray : [String] = []
}