VectorCalculatorと呼ばれる静的クラスを作成しようとしています。おそらく、この関数はVectorクラスに配置する必要があります(Obj-CのNSStringの-_-stringByAppendingString
_メソッドに似ています)。
とにかく、VectorCalculatorという静的クラスにいくつかの静的関数を追加します。 「ドット積」を計算し、ベクターを返します。もう1つの機能は、「2つの与えられたベクトル間の角度を計算して返す」ことです。
A)このための静的クラスを作成するこのルートに誰か行くか
B)これらの関数を... public func dotProductWithVector(v: Vector) -> Vector
やpublic func angleWithVector(v: Vector) -> Double
などのVectorクラスのインスタンス関数として追加する必要があります。そして、これらの引数ベクトルvの両方が、VectorクラスのメインVector に適用されます。
AまたはBに行く利点は何ですか?
Bと思うなら、将来の参考のために、Swiftですべての静的クラスをどのように作成しますか?
私があなたを正しく理解していれば、ケースAのTypeメソッドに興味があります。メソッドのfuncキーワードの前に静的キーワードを書くことで 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バリアントを使用する方が便利です。しかし、両方のタイプの機能を提供できると思います。
どのように作成しますか Swiftのすべての静的クラス?
static
はインスタンスがないことを意味するため、初期化子のない構造体にします。
struct VectorCalculator {
@available(*, unavailable) private init() {}
static func dotProduct(v: Vector, w: Vector) -> Vector {
...
}
}
あなたが探しているのはクラス関数だと思いますか?たぶんあなたの答えはここにあります。 Swiftでクラスレベルの関数を宣言する方法
class Foo {
class func Bar() -> String {
return "Bar"
}
}
Foo.Bar()
Swift 2.0では、classの代わりにstaticキーワードを使用できます。ただし、structにはstaticキーワードを、classにはclassキーワードを使用する必要があります
//編集は、あなたの質問を適切に誤解したことを確認しました