{"adoption": {"forks": 169, "observed_at": "2026-08-28T04:05:30.477133+00:00", "stars": 1743}, "canonical_url": "https://ross.abutalabs.com/products/closures", "card": {"archived": false, "artifact_type": "library", "description": "Swifty closures for UIKit and Foundation", "domain": ["mobile-development", "frontend", "developer-tools"], "enriched": true, "function": ["ui-components", "developer-tools"], "health_score": 20, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["dusty-commits/Closures"], "name": "dusty-commits/Closures", "platform": [], "pushed_at": "2021-04-29T15:34:36+00:00", "repo": "dusty-commits/Closures", "stars": 1743, "tags": ["closures", "uikit", "foundation", "delegation", "target-action", "cocoapods", "carthage", "swift-extensions", "ios", "swift", "mobile"], "topics": ["swift", "closures", "convenience-methods", "uicontrol", "cocoapods", "carthage", "delegation", "datasource", "uigesturerecognizer", "uiimagepickercontroller", "kvo", "uitableview", "uiscrollview", "uicollectionview", "uipickerview", "uibutton", "uitextfield", "uiview"], "urls": [], "use_cases": ["handle uibutton taps with closures instead of target-action", "replace uitableview delegate and datasource with closure handlers", "add gesture recognizers to views in one line", "configure uitextfield delegate callbacks using chained closures", "populate uipickerview with strings via closures", "observe kvo changes with closure handlers"], "what_it_is": "A Swift framework that adds closure-based handlers to popular UIKit and Foundation classes, replacing delegation, data source, and target-action patterns with concise closure syntax. It supports method chaining and covers controls, gesture recognizers, table/collection views, pickers, text fields, and KVO.", "when_to_avoid": ["your project targets newer Swift/UIKit versions and needs actively maintained dependencies", "your team follows strict delegation-based architecture conventions", "you need SwiftUI-first solutions rather than UIKit extensions"], "when_to_choose": ["you prefer closure-based APIs over delegation patterns in iOS development", "you want concise, chainable syntax for common UIKit callbacks", "you want to reduce boilerplate for table views, collection views, and controls"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/closures", "repo": "dusty-commits/Closures", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.477133+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:29:33.041302+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ff2a566bcb630ae6b5ee390b1dd564e7db9115128c380def8a41051bf5e68694", "fetched_at": "2026-08-28T04:05:30.477133+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dusty-commits/Closures"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3335, "days_push": 1952, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}