如何在Swift中创建静态类?

时间:2016-01-25 12:16:47

标签: swift static-classes

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

无论如何,我想在一个名为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中创建全部静态类?

3 个答案:

答案 0 :(得分:10)

如果我对您的理解正确,您会对案例A中的类型方法感兴趣。您可以通过在方法的func关键字之前编写static关键字来指示type methods。类也可以使用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)

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

答案 1 :(得分:10)

  

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

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

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

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

答案 2 :(得分:2)

我认为你要找的是班级功能? 也许你的答案可以在这里找到。 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关键字,为类

使用class关键字

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