如何在Swift中创建静态类?

chr*_*s P 12 static-classes swift

我正在寻找一个名为VectorCalculator的静态类.也许这个函数应该放在我的Vector类中(类似于NSString的 - -stringByAppendingStringObj-C中的方法)......如果你认为......让我知道.

无论如何,我想在一个名为VectorCalculator的静态类中添加几个静态函数.它将计算'点积'并返回一个Vector.另一个功能可能是"计算并返回两个给定矢量之间的角度".

A)是否有人会为此创建一个静态类

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

去A或B有什么好处?

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

Cœu*_*œur 12

如何在Swift中创建一个全静态类?

static 没有实例,所以我会把它作为一个没有初始化器的结构:

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

    static func dotProduct(v: Vector, w: Vector) -> Vector {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)


cur*_*ous 10

如果我已经正确理解你,你会对案例A中的类型方法感兴趣.通过在方法的func关键字之前写入static关键字来指示类型方法.类也可以使用class关键字来允许子类覆盖超类的该方法的实现.(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)
Run Code Online (Sandbox Code Playgroud)

至于B的好处,它取决于你解决的任务.如果你想保留未经修改的原始载体,使用A变体会更方便.但我认为你可以提供两种类型的功能.