2017-03-21 6 views
1

C#의 정적 클래스와 비슷하게 정적 클래스를 만들 수 있는지 알고 싶습니다. 인스턴스화 할 수없는 클래스는 정적 함수와 정적 속성 만 가질 수 있습니다. 이러한 유형의 수업이 신속하게 가능합니까?Swift에서 정적 클래스를 지원합니까?

그렇지 않은 경우 Swift에서 제공되는 도구를 사용하면 이러한 디자인 패턴을 다시 만드는 가장 효율적인 방법은 무엇입니까?

+4

대소 문자 구별'enum' 좋은 옵션, 즉 매우 도움이 링크를했다, 예를 들어 http://stackoverflow.com/q/38585344/2976878 – Hamish

+0

감사를 참조하십시오. 그래서 본질적으로 열거 형을 사용하면 인스턴스화 할 수 없으므로 모든 함수와 속성을 정적으로 만 간단하게 만들 수 있습니다! 천재! –

+1

정확하게 - 인스턴스화 할 수없는 stdlib의 ['Never'] (https://developer.apple.com/reference/swift/never) 유형에 사용되는 것입니다. – Hamish

답변

2

아니요. Swift에는 정적 클래스 개념이 없습니다. 하지만 어쨌든 할당 할 수있는 속성이 없다면 초기화가 어떤 차이를 만들까요? 나는 2 옵션을 생각할 수 있습니다 :

  • 마크 그래서 상속 될 수 없습니다 final 같은 클래스 : struct MyUtilities { ... }

+1

초기화를 막기 위해'private init()'을 추가하십시오. 아니면 단지'enum'을 사용하십시오. – BallpointBen

1

당신은 할 수 있습니다 final class MyClass { .... }

  • 이 상속 재산이없는 struct을 사용하여 이니셜 라이저를 비공개로 설정하여 동일한 기능을 사용하고 속성과 메소드 앞에 static/class 키워드를 사용하십시오. final 키워드를 사용하면 클래스가 b 서브 클래 싱되어 있고 final을 사용하면 정적 메서드는 오버라이드 할 수 없기 때문에 더 이상 이해할 수 없습니다.

    class Bar{ 
        private init(){} 
        static let x = 10 
    
        class func methodA(){ 
         //do something 
        } 
    
        static func methodB(){ 
         // do something else 
        } 
    } 
    
  • 3

    예, 가능합니다. 클래스를 final으로 정의하고 생성자를 private으로 만들어야합니다.

    final class Test { 
        private init() { 
    
        } 
    
        static func hello() { 
         print("hello") 
        } 
    } 
    
    Test.hello() 
    
    +2

    아니요,이 클래스를 서브 클래 싱 할 수 없습니다. 키워드'final'은 하위 클래스 화를 막습니다. –