如何在 Swift 中创建静态 class?

How can I create a static class in Swift?

我想创建一个名为 VectorCalculator 的静态 class。也许这个函数应该放在我的 Vector class 中(类似于 Obj-C 中 NSString 的 --stringByAppendingString 方法)...如果您认为...让我知道。

无论如何,我想向名为 VectorCalculator 的静态 class 添加几个静态函数。它会计算'dot product'和return一个Vector。另一个功能可能是 'calculate and return the angle between two given vectors'.

A) 有人会为此创建静态 class 或

B) 我是否应该将这些函数添加为 Vector class 的实例函数,例如...public func dotProductWithVector(v: Vector) -> Vectorpublic func angleWithVector(v: Vector) -> Double。然后这两个参数向量 v 将应用于向量 classes 主向量 u

选择 A 或 B 有什么好处?

如果您认为 B,仅供将来参考,您将如何在 Swift 中创建 一个全静态 class?

我想你要找的是 class 函数? 也许你的答案可以在这里找到。 How do I declare a class level function in Swift?

class Foo {
    class func Bar() -> String {
       return "Bar"
    }
}

Foo.Bar()

在 Swift 2.0 中,您可以使用 static 关键字代替 class。但是你应该对结构使用 static 关键字,对 classes

使用 class 关键字

//编辑刚刚看到我正确地误解了你的问题

如果我没理解错的话,你对案例 A 中的 Type 方法感兴趣。你通过在方法的 func 关键字之前写上 static 关键字来表明 type methods。 类 也可以使用 class 关键字来允许 subclasses 覆盖 superclass 对该方法的实现。 (c)

    struct Vector {
        var x, y, z: Int
    }

    class VectorCalculator {
        static func dotProductOfVector(vec1: Vector, withVector vec2: Vector) -> Vector {
            let newX = //calc x coord;
            let newY = //calc y coord;;
            let newZ = ////calc z coord;;
            return Vector(x: newX,y: newY, z: newZ);
        }
    }

let vec1 = Vector(x:1, y:2, z:3)
let vec2 = Vector(x:4, y:5, z:6)
let v = VectorCalculator.dotProductOfVector(vec1, withVector: vec2)

至于B的好处取决于你解决的任务。如果您想不修改原始向量,使用 A 变体会更方便。但我认为您可以提供这两种类型的功能。

how would you create an all static class in Swift?

static 表示没有实例,所以我将其设为没有初始化程序的结构:

struct VectorCalculator {
    @available(*, unavailable) private init() {}

    static func dotProduct(v: Vector, w: Vector) -> Vector {
        ...
    }
}