Swift是否支持静态类?

7
我想知道您是否能在Swift中创建类似C#中的静态类,即不能实例化只能具有静态函数和静态属性的类。这种类型的类在Swift中是否可能?
如果不行,那么在Swift中再现此设计模式的最有效方法是什么?请使用可用的工具。

4
无需定义关联值的枚举类型是一个不错的选择,例如参考 https://dev59.com/ClkT5IYBdhLWcg3wc_JR。 - Hamish
谢谢,那个链接非常有帮助。因此,枚举的使用确保它不能被实例化,然后您只需使所有函数和属性静态即可!天才! - J.beenie
1
精确地说 - 这是用于stdlib的Never类型的,该类型无法实例化。 - Hamish
3个回答

10
不,Swift没有静态类的概念。但是如果您无论如何都没有可分配的属性,初始化会有什么区别呢?我能想到两个选项:
1.将类标记为final,这样它就不能被继承:final class MyClass { .... } 2.使用struct,它没有继承:struct MyUtilities { ... }

4
添加 private init() 以防止初始化。或者只需使用 enum - BallpointBen

9

是的,这是可能的。您只需要将您的类定义为 final 并将构造函数设置为 private,例如:

final class Test {
   private init() {

   }

   static func hello() {
      print("hello")
   }
 }

 Test.hello()

3
不可以对这个类进行子类化。关键字“final”可以防止子类化。 - Jens Meder

1
你可以通过将初始化器设为私有并在属性和方法前使用 static/class 关键字来获得相同的功能。使用 final 关键字可以确保你的类不能被子类化,如果你使用 final,则静态方法不再有意义,因为它们无法被覆盖。
class Bar{
    private init(){}
    static let x = 10

    class func methodA(){
        //do something
    }

    static func methodB(){
        // do something else
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接