Swift에서 클래스 메소드 / 속성을 어떻게 만드나요?


97

Objective-C의 클래스 (또는 정적) 메서드는 +in 선언을 사용하여 수행 되었습니다.

@interface MyClass : NSObject

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

@end

이것이 Swift에서 어떻게 달성 될 수 있습니까?

답변:


152

유형 속성유형 메서드 라고 하며 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

5
나는 그것이 놀이터에 국한되지 않는다고 생각하지 않으며 앱에서도 컴파일되지 않습니다.
Erik Kerber 2014-06-06

@ErikKerber 알아서 반갑습니다. 아직 필요하지 않았으므로 직접 테스트하지 않았습니다. 감사합니다.
Pascal

Xcode 6.2는 'class var varName : Type'형식의 모든 항목에 대해 '아직 지원되지 않는 클래스 변수'를 계속보고합니다.
Ali Beadle 2015

Swift 2.0+에서는 class함수 나 계산 된 유형 속성 앞에 키워드 가 필요하지 않습니다 .
Govind Rai

20

Swift에서는 유형 속성 및 유형 메소드라고하며 클래스 키워드를 사용합니다.
신속하게 클래스 메서드 또는 유형 메서드 선언 :

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

해당 방법에 액세스 :

SomeClass.someTypeMethod()

또는 신속하게 메소드를 참조 할 수 있습니다.


정말 고맙습니다! Objective-C의 NSObject 클래스보다 훨씬 쉬웠으며 이미 설정하기 매우 쉬웠습니다.
Supertecnoboff

14

선언 앞에 class클래스 인 static경우 또는 구조 인 경우를 추가합니다.

class MyClass : {

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

func여기 에 키워드 가 필요하지 않습니까?
Jamie Forrest

1
물론이야. 붐비는 버스에 서서 질문에 답해줍니다. 수정되었습니다.
Analog File

4

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))
        }
    }

    ....
}

저는 Swift를 배우고 있으며 Swift 클래스 인스턴스에 관련 객체를 연결할 수 있는지 궁금합니다. 대답은 "일종"인 것 같습니다. (예, NSObject의 하위 클래스 인 개체 만 해당됩니다.) 저를 위해 해결해 주셔서 감사합니다. (투표)
Duncan C

4

선언 앞에 class 또는 static (함수 인 경우)을 추가하고 static (속성 인 경우)을 추가합니다.

class MyClass {

    class func aClassMethod() { ... }
    static func anInstanceMethod()  { ... }
    static var myArray : [String] = []
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.