我正在寻找一个名为VectorCalculator的静态类。也许这个函数应该放在我的Vector类中(类似于Obj-C中的NSString的 - -stringByAppendingString
方法)......如果你认为......让我知道。
无论如何,我想在一个名为VectorCalculator的静态类中添加几个静态函数。它将计算'点积'并返回一个Vector。另一个功能可能是“计算并返回两个给定矢量之间的角度”。
A)是否有人会为此创建静态类或
B)我应该将这些函数添加为Vector类的实例函数,例如...... public func dotProductWithVector(v: Vector) -> Vector
和public func angleWithVector(v: Vector) -> Double
。然后这两个参数向量 v 将应用于Vector类main Vector u 。
去A或B的好处是什么?
如果您认为B,仅供将来参考,您将如何在Swift中创建全部静态类?
答案 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关键字//编辑刚看到我正确地误解了你的问题