参考文章
Swift-StringAttribute
源码
import Foundation
@objc protocol AttributeStringProtocol {
/**
富文本属性名称
- returns: 属性名称
*/
func attributeName() -> NSString
/**
属性对应的值
- returns: 对应的值
*/
func attributeValue() -> AnyObject
/**
属性设置生效范围
- returns: 生效范围
*/
optional func effectiveRange() -> NSRange
}
import Foundation
extension NSMutableAttributedString {
/**
添加富文本对象
- parameter stringAttribute: 实现了AttributeStringProtocol协议的对象
*/
func addStringAttribute(stringAttribute : AttributeStringProtocol) {
self.addAttribute(stringAttribute.attributeName() as String,
value: stringAttribute.attributeValue(),
range: stringAttribute.effectiveRange!())
}
/**
删除指定的富文本对象
- parameter stringAttribute: 实现了AttributeStringProtocol协议的对象
*/
func removeStringAttribute(stringAttribute : AttributeStringProtocol) {
self.removeAttribute(stringAttribute.attributeName() as String,
range: stringAttribute.effectiveRange!())
}
}
import UIKit
class StringAttribute: NSObject, AttributeStringProtocol {
// 富文本的生效范围
var m_effectRange : NSRange! = NSMakeRange(0, 0)
// MARK: AttributeStringProtocol
func attributeName() -> NSString {
fatalError("It have to be overwritten by subclass !")
}
func attributeValue() -> AnyObject {
fatalError("It have to be overwritten by subclass !")
}
func effectiveRange() -> NSRange {
return m_effectRange
}
}
分析
分析1.png
分析2.png
源码
下载源码
网友评论