回答:
これらは型プロパティと型メソッドと呼ばれ、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では型プロパティと型メソッドと呼ばれ、classキーワードを使用します。
swiftでクラスメソッドまたはTypeメソッドを宣言する:
class SomeClass
{
class func someTypeMethod()
{
// type method implementation goes here
}
}
そのメソッドにアクセスする:
SomeClass.someTypeMethod()
または、迅速にメソッドを参照できます
class
それがクラスである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))
}
}
....
}