
Jawaban ini telah diperbarui untuk Swift 4.2.
Referensi cepat
Bentuk umum untuk membuat dan mengatur string yang dikaitkan adalah seperti ini. Anda dapat menemukan opsi umum lainnya di bawah ini.
// create attributed string
let myString = "Swift Attributed String"
let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.blue ]
let myAttrString = NSAttributedString(string: myString, attributes: myAttribute)
// set attributed text on a UILabel
myLabel.attributedText = myAttrString

let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.blue ]

let myAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]

let myAttribute = [ NSAttributedString.Key.font: UIFont(name: "Chalkduster", size: 18.0)! ]

let myAttribute = [ NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue ]

let myShadow = NSShadow()
myShadow.shadowBlurRadius = 3
myShadow.shadowOffset = CGSize(width: 3, height: 3)
myShadow.shadowColor = UIColor.gray
let myAttribute = [ NSAttributedString.Key.shadow: myShadow ]
Sisa dari posting ini memberikan lebih banyak detail bagi mereka yang tertarik.
Atribut
Atribut string hanyalah kamus dalam bentuk [NSAttributedString.Key: Any], di mana NSAttributedString.Keynama kunci atribut dan Anymerupakan nilai dari beberapa Tipe. Nilai bisa berupa font, warna, integer, atau yang lainnya. Ada banyak atribut standar di Swift yang telah ditentukan sebelumnya. Sebagai contoh:
- nama kunci:,
NSAttributedString.Key.fontnilai: aUIFont
- nama kunci:,
NSAttributedString.Key.foregroundColornilai: aUIColor
- nama kunci:,
NSAttributedString.Key.linknilai: an NSURLatauNSString
Ada banyak lainnya. Lihat tautan ini untuk lebih lanjut. Anda bahkan dapat membuat atribut khusus Anda sendiri seperti:
nama kunci:, NSAttributedString.Key.myNamenilai: beberapa Jenis.
jika Anda membuat ekstensi :
extension NSAttributedString.Key {
static let myName = NSAttributedString.Key(rawValue: "myCustomAttributeKey")
}
Membuat atribut di Swift
Anda dapat mendeklarasikan atribut seperti halnya mendeklarasikan kamus lainnya.
// single attributes declared one at a time
let singleAttribute1 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let singleAttribute2 = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
let singleAttribute3 = [ NSAttributedString.Key.underlineStyle: NSUnderlineStyle.double.rawValue ]
// multiple attributes declared at once
let multipleAttributes: [NSAttributedString.Key : Any] = [
NSAttributedString.Key.foregroundColor: UIColor.green,
NSAttributedString.Key.backgroundColor: UIColor.yellow,
NSAttributedString.Key.underlineStyle: NSUnderlineStyle.double.rawValue ]
// custom attribute
let customAttribute = [ NSAttributedString.Key.myName: "Some value" ]
Perhatikan rawValuebahwa itu diperlukan untuk nilai gaya garis bawah.
Karena atribut hanyalah Kamus, Anda juga dapat membuatnya dengan membuat Kamus kosong dan kemudian menambahkan pasangan nilai kunci ke dalamnya. Jika nilainya akan berisi banyak jenis, maka Anda harus menggunakan Anysebagai jenisnya. Berikut adalah multipleAttributescontoh dari atas, dibuat ulang dengan cara ini:
var multipleAttributes = [NSAttributedString.Key : Any]()
multipleAttributes[NSAttributedString.Key.foregroundColor] = UIColor.green
multipleAttributes[NSAttributedString.Key.backgroundColor] = UIColor.yellow
multipleAttributes[NSAttributedString.Key.underlineStyle] = NSUnderlineStyle.double.rawValue
String yang dikaitkan
Sekarang setelah Anda memahami atribut, Anda dapat membuat string yang dikaitkan.
Inisialisasi
Ada beberapa cara untuk membuat string yang dikaitkan. Jika Anda hanya membutuhkan string read-only yang dapat Anda gunakan NSAttributedString. Berikut ini beberapa cara untuk menginisialisasi:
// Initialize with a string only
let attrString1 = NSAttributedString(string: "Hello.")
// Initialize with a string and inline attribute(s)
let attrString2 = NSAttributedString(string: "Hello.", attributes: [NSAttributedString.Key.myName: "A value"])
// Initialize with a string and separately declared attribute(s)
let myAttributes1 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let attrString3 = NSAttributedString(string: "Hello.", attributes: myAttributes1)
Jika nanti Anda perlu mengubah atribut atau konten string, Anda harus menggunakannya NSMutableAttributedString. Deklarasi sangat mirip:
// Create a blank attributed string
let mutableAttrString1 = NSMutableAttributedString()
// Initialize with a string only
let mutableAttrString2 = NSMutableAttributedString(string: "Hello.")
// Initialize with a string and inline attribute(s)
let mutableAttrString3 = NSMutableAttributedString(string: "Hello.", attributes: [NSAttributedString.Key.myName: "A value"])
// Initialize with a string and separately declared attribute(s)
let myAttributes2 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let mutableAttrString4 = NSMutableAttributedString(string: "Hello.", attributes: myAttributes2)
Mengubah String yang Dikaitkan
Sebagai contoh, mari kita buat string yang dikaitkan di bagian atas posting ini.
Pertama buat NSMutableAttributedStringdengan atribut font baru.
let myAttribute = [ NSAttributedString.Key.font: UIFont(name: "Chalkduster", size: 18.0)! ]
let myString = NSMutableAttributedString(string: "Swift", attributes: myAttribute )
Jika Anda bekerja bersama, setel string yang dikaitkan dengan UITextView(atau UILabel) seperti ini:
textView.attributedText = myString
Anda tidak menggunakan textView.text.
Inilah hasilnya:

Kemudian tambahkan string terkait lainnya yang tidak memiliki set atribut apa pun. (Perhatikan bahwa meskipun saya pernah letmenyatakan di myStringatas, saya masih dapat memodifikasinya karena itu adalah NSMutableAttributedString. Ini sepertinya tidak disukai bagi saya dan saya tidak akan terkejut jika ini berubah di masa depan. Beri saya komentar ketika itu terjadi.)
let attrString = NSAttributedString(string: " Attributed Strings")
myString.append(attrString)

Selanjutnya kita hanya akan memilih kata "Strings", yang dimulai pada indeks 17dan memiliki panjang 7. Perhatikan bahwa ini adalah NSRangedan bukan Swift Range. (Lihat jawaban ini untuk informasi lebih lanjut tentang Rentang.) addAttributeMetode ini memungkinkan kita meletakkan nama kunci atribut di tempat pertama, nilai atribut di tempat kedua, dan rentang di tempat ketiga.
var myRange = NSRange(location: 17, length: 7) // range starting at location 17 with a lenth of 7: "Strings"
myString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.red, range: myRange)

Akhirnya, mari kita tambahkan warna latar belakang. Untuk variasi, mari gunakan addAttributesmetode ini (perhatikan s). Saya bisa menambahkan beberapa atribut sekaligus dengan metode ini, tetapi saya hanya akan menambahkan satu lagi.
myRange = NSRange(location: 3, length: 17)
let anotherAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
myString.addAttributes(anotherAttribute, range: myRange)

Perhatikan bahwa atributnya tumpang tindih di beberapa tempat. Menambahkan atribut tidak menimpa atribut yang sudah ada di sana.
Terkait
Bacaan lebih lanjut
NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue | NSUnderlineStyle.PatternDot.rawValue