Swifty NSAttributed String
AttributedString.swift
Swifty NSAttributed String.
Problem
The problem is attributes
is a [NSAttributedStringKey: Any]
, even though the keys NSAttributedString.Key
are all defined, the values still a type of Any
, which means we have to deal with literally Any
thing. And feel like it's not swift.
Installation
AttributedString.swift is available through CocoaPods. To install
it, simply add the following line to your Podfile:
pod 'AttributedString.swift'
How to use
After installation, Just import AttributedString_swift
import AttributedString_swift
When adding more attributes on a NSMutableAttributedString, you can use the func addAttributes(attrs:[Attribute], for scope:Scope)
.
Scope
has currently have 3 types: .all
, .subtext
, closedRange
.
Example
import AttributedString_swift
let label1 = Label()
let label2 = Label()
...
label1.attributedText = NSAttributedString(
string: "Hello World",
attrs:[
.font(UIFont.boldSystemFont(ofSize: 30)),
.link("https://www.google.com")
])
let attrText2 = NSMutableAttributedString(
string: "The quick brown fox jump over the lazy dog.",
attrs: [
.font(.systemFont(ofSize: 18)),
.foregroundColor(.orange)
])
// Adding more attributes!
attrText2.addAttributes(
attrs: [
.font(.boldSystemFont(ofSize: 50)),
.foregroundColor(.gray)
],
for: .subtext("The"))
attrText2.addAttributes(
attrs: [
.foregroundColor(.green),
.font(.systemFont(ofSize: 50))
],
for: .closedRange(4...8))
attrText2.addAttributes(
attrs: [
.foregroundColor(.red),
.font(.boldSystemFont(ofSize: 50))],
for: .closedRange(10...15))
attrText2.addAttributes(
attrs: [
.font(.boldSystemFont(ofSize: 30)),
.link("https://en.wikipedia.org/wiki/Dog"),
],
for: .subtext("dog"))
// With paragraph style for whole text
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
attrText2.addAttributes(
attrs: [
.paragraphStyle(paragraphStyle)
],
for: .all)
label2.attributedText = attrText2
To run the example project, clone the repo, and run pod install
from the Example directory first.