Các phương thức lớp (hoặc tĩnh) trong Objective-C đã được hoàn thành bằng cách sử dụng +
trong khai báo.
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
Làm thế nào để đạt được điều này trong Swift?
Các phương thức lớp (hoặc tĩnh) trong Objective-C đã được hoàn thành bằng cách sử dụng +
trong khai báo.
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
Làm thế nào để đạt được điều này trong Swift?
Câu trả lời:
Họ được gọi là thuộc tính loại và phương pháp loại và bạn sử dụng class
hoặc static
từ khóa.
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
từ khóa trước một hàm hoặc một thuộc tính kiểu tính toán.
Chúng được gọi là thuộc tính kiểu và phương thức kiểu trong Swift và bạn sử dụng từ khóa class.
Khai báo một phương thức lớp hoặc phương thức Type trong nhanh chóng:
class SomeClass
{
class func someTypeMethod()
{
// type method implementation goes here
}
}
Truy cập phương pháp đó:
SomeClass.someTypeMethod()
hoặc bạn có thể tham khảo Phương pháp trong nhanh chóng
Thêm khai báo với class
nếu đó là một lớp hoặc với static
nếu đó là một cấu trúc.
class MyClass : {
class func aClassMethod() { ... }
func anInstanceMethod() { ... }
}
func
từ khóa ở đây?
Swift 1.1 không có thuộc tính lớp được lưu trữ. Bạn có thể triển khai nó bằng cách sử dụng thuộc tính lớp bao đóng để tìm nạp một đối tượng được liên kết gắn với đối tượng lớp. (Chỉ hoạt động trong các lớp bắt nguồn từ 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))
}
}
....
}
Thêm khai báo với lớp hoặc static nếu đó là một hàm hoặc với static nếu đó là một thuộc tính.
class MyClass {
class func aClassMethod() { ... }
static func anInstanceMethod() { ... }
static var myArray : [String] = []
}