C#의 정적 클래스와 비슷하게 정적 클래스를 만들 수 있는지 알고 싶습니다. 인스턴스화 할 수없는 클래스는 정적 함수와 정적 속성 만 가질 수 있습니다. 이러한 유형의 수업이 신속하게 가능합니까?Swift에서 정적 클래스를 지원합니까?
그렇지 않은 경우 Swift에서 제공되는 도구를 사용하면 이러한 디자인 패턴을 다시 만드는 가장 효율적인 방법은 무엇입니까?
C#의 정적 클래스와 비슷하게 정적 클래스를 만들 수 있는지 알고 싶습니다. 인스턴스화 할 수없는 클래스는 정적 함수와 정적 속성 만 가질 수 있습니다. 이러한 유형의 수업이 신속하게 가능합니까?Swift에서 정적 클래스를 지원합니까?
그렇지 않은 경우 Swift에서 제공되는 도구를 사용하면 이러한 디자인 패턴을 다시 만드는 가장 효율적인 방법은 무엇입니까?
아니요. Swift에는 정적 클래스 개념이 없습니다. 하지만 어쨌든 할당 할 수있는 속성이 없다면 초기화가 어떤 차이를 만들까요? 나는 2 옵션을 생각할 수 있습니다 :
이마크 그래서 상속 될 수 없습니다 final
같은 클래스 : struct MyUtilities { ... }
초기화를 막기 위해'private init()'을 추가하십시오. 아니면 단지'enum'을 사용하십시오. – BallpointBen
당신은 할 수 있습니다 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
}
}
예, 가능합니다. 클래스를 final
으로 정의하고 생성자를 private
으로 만들어야합니다.
final class Test {
private init() {
}
static func hello() {
print("hello")
}
}
Test.hello()
아니요,이 클래스를 서브 클래 싱 할 수 없습니다. 키워드'final'은 하위 클래스 화를 막습니다. –
대소 문자 구별'enum' 좋은 옵션, 즉 매우 도움이 링크를했다, 예를 들어 http://stackoverflow.com/q/38585344/2976878 – Hamish
감사를 참조하십시오. 그래서 본질적으로 열거 형을 사용하면 인스턴스화 할 수 없으므로 모든 함수와 속성을 정적으로 만 간단하게 만들 수 있습니다! 천재! –
정확하게 - 인스턴스화 할 수없는 stdlib의 ['Never'] (https://developer.apple.com/reference/swift/never) 유형에 사용되는 것입니다. – Hamish