Last active
September 16, 2020 16:40
-
-
Save arpitdsoni/d9169662e17791b4b7422dbfa0fc75ab to your computer and use it in GitHub Desktop.
Modified SwiftGen xcassets template to make static constant of type UIColor or NSColor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// swiftlint:disable all | |
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen | |
{% if catalogs %} | |
{% set enumName %}{{param.enumName|default:"Colors"}}{% endset %} | |
{% set colorType %}{{param.colorTypeName|default:"Color"}}{% endset %} | |
{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %} | |
{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} | |
#if os(macOS) | |
import AppKit | |
#elseif os(iOS) | |
import UIKit | |
#elseif os(iOS) || os(tvOS) || os(watchOS) | |
import UIKit | |
#endif | |
// swiftlint:disable superfluous_disable_command file_length implicit_return | |
// MARK: - Color Assets | |
{% macro enumBlock assets %} | |
{% call casesBlock assets %} | |
{% if param.allValues %} | |
// swiftlint:disable trailing_comma | |
{% if resourceCount.color > 0 %} | |
{{accessModifier}} static let allColors: [{{colorType}}] = [ | |
{% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %} | |
] | |
{% endif %} | |
// swiftlint:enable trailing_comma | |
{% endif %} | |
{% endmacro %} | |
{% macro casesBlock assets %} | |
{% for asset in assets %} | |
{% if asset.type == "color" %} | |
{{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = Color(named: "{{asset.value}}") | |
{% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} | |
{{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { | |
{% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %} | |
} | |
{% elif asset.items %} | |
{% call casesBlock asset.items %} | |
{% endif %} | |
{% endfor %} | |
{% endmacro %} | |
{% macro allValuesBlock assets filter prefix %} | |
{% for asset in assets %} | |
{% if asset.type == filter %} | |
{{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}, | |
{% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} | |
{% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %} | |
{% call allValuesBlock asset.items filter prefix2 %} | |
{% elif asset.items %} | |
{% call allValuesBlock asset.items filter prefix %} | |
{% endif %} | |
{% endfor %} | |
{% endmacro %} | |
// swiftlint:disable identifier_name line_length nesting type_body_length type_name | |
{{accessModifier}} enum {{enumName}} { | |
{% if catalogs.count > 1 or param.forceFileNameEnum %} | |
{% for catalog in catalogs %} | |
{{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { | |
{% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %} | |
} | |
{% endfor %} | |
{% else %} | |
{% call enumBlock catalogs.first.assets %} | |
{% endif %} | |
} | |
// swiftlint:enable identifier_name line_length nesting type_body_length type_name | |
// MARK: - Implementation Details | |
{% if resourceCount.color > 0 %} | |
#if os(macOS) | |
{{accessModifier}} typealias Color = NSColor | |
#elseif os(iOS) || os(tvOS) || os(watchOS) | |
{{accessModifier}} typealias Color = UIColor | |
#endif | |
{{accessModifier}} extension {{colorType}} { | |
@available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) | |
convenience fileprivate init(named: String) { | |
let bundle = {{param.bundle|default:"BundleToken.bundle"}} | |
#if os(iOS) || os(tvOS) | |
self.init(named: named, in: bundle, compatibleWith: nil)! | |
#elseif os(macOS) | |
self.init(named: NSColor.Name(named), bundle: bundle)! | |
#elseif os(watchOS) | |
self.init(named: named)! | |
#endif | |
} | |
} | |
{% endif %} | |
{% if not param.bundle %} | |
// swiftlint:disable convenience_type | |
private final class BundleToken { | |
static let bundle: Bundle = { | |
Bundle(for: BundleToken.self) | |
}() | |
} | |
// swiftlint:enable convenience_type | |
{% endif %} | |
{% else %} | |
// No assets found | |
{% endif %} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You don't have to call
.color
every time now.Output: