swift版的StringAttribute

简介:

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!())
    }
}

分析


目录
相关文章
|
11天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1230 5
|
10天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1213 87
|
10天前
|
云栖大会
阿里云云栖大会2025年9月24日开启,免费申请大会门票,速度领取~
2025云栖大会将于9月24-26日举行,官网免费预约畅享票,审核后短信通知,持证件入场
1796 13
|
20天前
|
人工智能 运维 安全
|
3天前
|
资源调度
除了nrm-pm,还有哪些工具可以管理多个包管理器的源?
除了nrm-pm,还有哪些工具可以管理多个包管理器的源?
234 127
|
4天前
|
前端开发
Promise的then方法返回的新Promise对象有什么特点?
Promise的then方法返回的新Promise对象有什么特点?
177 2