swift版的StringAttribute
效果
源码
https://github.com/YouXianMing/Swift-StringAttribute
//
// StringAttributeProtocol.swift
// Swift-StringAttribute
//
// Created by YouXianMing on 15/10/8.
// Copyright © 2015年 YouXianMing. All rights reserved.
//
import Foundation
@objc protocol StringAttributeProtocol {
/**
富文本属性名字
- returns: 属性名字
*/
func attributeName() -> NSString;
/**
属性对应的值
- returns: 对应的值
*/
func attributeValue()-> AnyObject;
/**
属性设置生效范围
- returns: 生效范围
*/
optional func effectiveStringRange() -> NSRange;
}
//
// StringAttribute.swift
// Swift-StringAttribute
//
// Created by YouXianMing on 15/10/8.
// Copyright © 2015年 YouXianMing. All rights reserved.
//
import UIKit
class StringAttribute: NSObject, StringAttributeProtocol {
// MARK: 公用的属性
/// 富文本生效范围
var effectRange : NSRange! = NSMakeRange(0, 0)
// MARK: 公用的方法
/**
属性有效范围
- returns: 有效范围
*/
func effectiveStringRange() -> NSRange {
return effectRange
}
// MARK: ==由子类重写的方法==
/**
/////////////////
由子类重写
/////////////////
属性名字
- returns: 属性名字
*/
func attributeName() -> NSString {
fatalError("must be overwrote by subclass")
}
/**
/////////////////
由子类重写
/////////////////
属性值
- returns: 属性值
*/
func attributeValue()-> AnyObject {
fatalError("must be overwrote by subclass")
}
}
//
// NSMutableAttributedString+StringAttribute.swift
// Swift-StringAttribute
//
// Created by YouXianMing on 15/10/8.
// Copyright © 2015年 YouXianMing. All rights reserved.
//
import Foundation
extension NSMutableAttributedString {
/**
添加富文本对象
- parameter stringAttribute: 实现了StringAttributeProtocol协议的对象
*/
func addStringAttribute(stringAttribute : StringAttributeProtocol) {
self.addAttribute(stringAttribute.attributeName() as String,
value: stringAttribute.attributeValue(),
range: stringAttribute.effectiveStringRange!())
}
/**
消除指定的富文本对象
- parameter stringAttribute: 实现了StringAttributeProtocol协议的对象
*/
func removeStringAttribute(stringAttribute : StringAttributeProtocol) {
self.removeAttribute(stringAttribute.attributeName() as String,
range: stringAttribute.effectiveStringRange!())
}
}
分析