我如何在Swift中创build类方法/属性?
Objective-C中的类(或静态)方法是在声明中使用+
完成的。
@interface MyClass : NSObject + (void)aClassMethod; - (void)anInstanceMethod; @end
这怎么能在Swift中实现呢?
它们被称为types属性和types方法,并使用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
它们在Swift中被称为types属性和types方法,并使用class关键字。
在swift中声明一个类方法或Type方法:
class SomeClass { class func someTypeMethod() { // type method implementation goes here } }
访问该方法:
SomeClass.someTypeMethod()
或者你可以在swift中引用方法
如果它是一个类,那么在类前加上声明;如果是一个结构,则用static
声明。
class MyClass : { class func aClassMethod() { ... } func anInstanceMethod() { ... } }
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] = [] }