如何在 Swift 中创建类方法/属性?

Objective-C 中的类(或静态)方法是使用声明中的 +完成的。

@interface MyClass : NSObject


+ (void)aClassMethod;
- (void)anInstanceMethod;


@end

如何在 Swift 中实现这一点?

70543 次浏览

Prepend the declaration with class if it's a class, or with static if it's a structure.

class MyClass : {


class func aClassMethod() { ... }
func anInstanceMethod()  { ... }
}

They are called type properties and type methods and you use the class or static keywords.

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

They are called type properties and type methods in Swift and you use the class keyword.
Declaring a class method or Type method in swift :

class SomeClass
{
class func someTypeMethod()
{
// type method implementation goes here
}
}

Accessing that method :

SomeClass.someTypeMethod()

or you can refer Methods in swift

Swift 1.1 doesn't have stored class properties. You can implement it using a closure class property that fetches an associated object tied to the class object. (Only works in classes derived from 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))
}
}


....
}

Prepend the declaration with class or static if it's a function, or with static if it's a property.

class MyClass {


class func aClassMethod() { ... }
static func anInstanceMethod()  { ... }
static var myArray : [String] = []
}