Как создать статический класс в Swift?
Я ищу, чтобы создать статический класс под названием VectorCalculator. Возможно, эта функция должна быть просто помещена в мой векторный класс (аналогично NSString --stringByAppendingString
метод в Obj-C)... и если ты так думаешь... дайте мне знать.
В любом случае я хочу добавить пару статических функций в статический класс под названием VectorCalculator. Он вычислит "точечный продукт" и вернет вектор. Другая функция, вероятно, будет " вычислять и возвращать угол между двумя заданными векторы.'
A) кто-нибудь пойдет по этому маршруту создания статического класса для этого или
B) должен ли я просто добавить эти функции в качестве функций экземпляра векторного класса, таких как... public func dotProductWithVector(v: Vector) -> Vector
и public func angleWithVector(v: Vector) -> Double
. И тогда оба этих вектора аргументов v будет применяться к классам векторов main Vector u.
в чем преимущество перехода либо A, либо B?
Если вы думаете B, просто для справки, как будет вы создаете все статический класс в Swift?
3 ответов
Если я правильно понял вас, вас интересуют методы типа в случае A. вы указываете методы типа путем написания статического ключевого слова перед ключевым словом func метода. Классы могут также использовать ключевое слово 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, это зависит от задач, которые вы решаете. Если вы хотите оставить исходные векторы неизмененными, удобнее использовать вариант. Но я думаю, вы можете предоставить оба типа функций.
как хотели бы вы создать все статический класс в 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 вы можете использовать ключевое слово static вместо class. Но вы должны использовать ключевое слово static для структур и ключевое слово class для классов
/ / Edit только что увидел, что я неправильно понял ваш вопрос