CGPointで四則演算させたい
C++なら演算子のオーバーロードあるのに......Swiftにもあるやん
ということを昨日知った情弱なのでextensionに付け足しました
誰かやってそうだけどバシっとしたのヒットしなかった
やれること
こういうことができるようになります
値とCGPointの計算ルールはまぁextensionに書いてる通りです
//準備
let p1 = CGPoint(x:2, y:3)
let p2 = CGPoint(x:5, y:7)
let v1:CGFloat = 11
let v2:CGFloat = 13
// CGPoint同士で四則演算
p1 + p2 //{x:7, y:10}
p1 - p2 //{x:-3, y:-4}
p1 * p2 //{x:10, y:21}
p1 / p2 //{x:0.4, y:0.429}
// 値とCGPointで四則演算
p1 + v1 //{x:13, y:14}
p2 - v2 //{x:-8, y:-6}
p1 * v1 //{x:22, y:33}
p2 / v2 //{x:0.385, y:0.538}
//CGPointと値で四則演算
v1 + p1 //{x:13, y:14}
v2 - p2 //{x:8, y:6}
v1 * p1 //{x:22, y:33}
v2 / p2 //{x:2.6, y:1.857}
extension
extension CGPoint{
static func + (left: CGPoint, right: CGPoint) -> CGPoint {
let x = left.x + right.x
let y = left.y + right.y
return CGPoint(x:x, y:y)
}
static func + (left: CGPoint, right: CGFloat) -> CGPoint {
let x = left.x + right
let y = left.y + right
return CGPoint(x:x, y:y)
}
static func + (left: CGFloat, right: CGPoint) -> CGPoint {
let x = left + right.x
let y = left + right.y
return CGPoint(x:x, y:y)
}
static func - (left: CGPoint, right: CGPoint) -> CGPoint {
let x = left.x - right.x
let y = left.y - right.y
return CGPoint(x:x, y:y)
}
static func - (left: CGPoint, right: CGFloat) -> CGPoint {
let x = left.x - right
let y = left.y - right
return CGPoint(x:x, y:y)
}
static func - (left: CGFloat, right: CGPoint) -> CGPoint {
let x = left - right.x
let y = left - right.y
return CGPoint(x:x, y:y)
}
static func * (left: CGPoint, right: CGPoint) -> CGPoint {
let x = left.x * right.x
let y = left.y * right.y
return CGPoint(x:x, y:y)
}
static func * (left: CGPoint, right: CGFloat) -> CGPoint {
let x = left.x * right
let y = left.y * right
return CGPoint(x:x, y:y)
}
static func * (left: CGFloat, right: CGPoint) -> CGPoint {
let x = left * right.x
let y = left * right.y
return CGPoint(x:x, y:y)
}
static func / (left: CGPoint, right: CGPoint) -> CGPoint {
let x = left.x / right.x
let y = left.y / right.y
return CGPoint(x:x, y:y)
}
static func / (left: CGPoint, right: CGFloat) -> CGPoint {
let x = left.x / right
let y = left.y / right
return CGPoint(x:x, y:y)
}
static func / (left: CGFloat, right: CGPoint) -> CGPoint {
let x = left / right.x
let y = left / right.y
return CGPoint(x:x, y:y)
}
}