🏛️GeometryKit
swift ⟩ type ⟩ custom ⟩ package ⟩ GeometryKit
為了方便幾何計算而設計的模組,支援向量、複數運算。 🔗 https://github.com/lochiwei/GeometryKit
MetricSpace:支援「距離」觀念
Frame:簡化 frame 與 CGRect 的相關計算
Vector:支援「向量運算」的底層邏輯
Vector2D:支援「平面幾何」的各種計算
ComplexNumber:支援「複數」運算
將要遵循 GeometryKit 相關協定 (Vector2D, ComplexNumber 等) 的具體型別列在一個獨立的檔案中,並加入該遵循的條件:
// 📁 +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)
}
}做好這些擴充宣告後,其他檔案就不需要再宣告一次了。但使用到 GeometryKit 相關功能時,還是需要 import GeometryKit,請注意❗️
// 📁 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))
}ChatGPT ⟩
Last updated
Was this helpful?