// 📁 +GeometryKit.swift
import SwiftUI
import GeometryKit
// ⭐️ CGPoint + Vector2D
extension CGPoint: Vector2D {
// 因為 CGFloat 已經擁有該遵循的屬性、方法,
// 所以只要指明 associated type 即可。
public typealias Scalar = CGFloat
}
// ⭐️ CGSize + Vector2D
extension CGSize: Vector2D {
public typealias Scalar = CGFloat
// CGSize 沒有 x, y 屬性
public var x: CGFloat { width }
public var y: CGFloat { height }
// CGSize 沒有 init(x:y:) initializer
public init(x: CGFloat, y: CGFloat) {
self.init(width: x, height: y)
}
}
// 📁 anotherFile.swift
import SwiftUI
import GeometryKit // ⭐️ 有用到此功能的檔案需要加入此行
public func testGeometryKit() {
let p = CGPoint(1,2) // ⭐️ CGPoint 已經遵循 Vector2D
let q = CGPoint(3, 4)
print("---------------------")
print("p =", p)
print("q =", q)
print("p + q =", p + q)
print("p.dot(q) =", p.dot(q))
print("p.cross(q) =", p.cross(q))
print(p.angle(to: q))
}