Objective-C의 클래스 (또는 정적) 메서드는 +
in 선언을 사용하여 수행 되었습니다.
@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에서는 유형 속성 및 유형 메소드라고하며 클래스 키워드를 사용합니다.
신속하게 클래스 메서드 또는 유형 메서드 선언 :
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))
}
}
....
}