swift的String处理
import UIKit
import CoreText class ViewController: UIViewController { override func viewDidLoad() {
super.viewDidLoad() print(UIFont.familyNames) let font = UIFont(name: "Heiti SC", size: 18)
let textStr = "Hi, I'm lilei, what's your name please? Are you Han Meimei?" let label = UILabel(frame: CGRect(x: 10, y: 30, width: 100, height: 400))
self.view.addSubview(label)
label.font = font
label.numberOfLines = 0
label.text = textStr print(getLines(text: textStr, font: font! , rect: CGRect(x: 10, y: 30, width: 100, height: 400))) } func getLines(text: String, font: UIFont, rect:CGRect) -> [String] { let fontName: CFString = font.fontName as CFString
let myFont = CTFontCreateWithName(fontName, font.pointSize, nil)
let attStr = NSMutableAttributedString(string: text)
attStr.addAttribute(kCTFontAttributeName as NSAttributedString.Key, value: myFont, range: NSMakeRange(0, attStr.length))
let frameSetter: CTFramesetter = CTFramesetterCreateWithAttributedString(attStr)
let path: CGMutablePath = CGMutablePath()
path.addRect(CGRect(x: 0, y: 0, width: rect.size.width, height: CGFloat.greatestFiniteMagnitude))
let frame: CTFrame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, nil)
let lines = CTFrameGetLines(frame) as Array
var linesArray = [String]() for line in lines {
let lineRef: CTLine = line as! CTLine
let lineRange: CFRange = CTLineGetStringRange(lineRef)
let range: NSRange = NSMakeRange(lineRange.location, lineRange.length)
let subStr = text.substring(from: range.location, length: range.length)
linesArray.append(subStr)
} return linesArray
} } extension String {
func substring(from: Int?, to: Int?) -> String {
if let start = from {
guard start < self.characters.count else {
return ""
}
} if let end = to {
guard end >= 0 else {
return ""
}
} if let start = from, let end = to {
guard end - start >= 0 else {
return ""
}
} let startIndex: String.Index
if let start = from, start >= 0 {
startIndex = self.index(self.startIndex, offsetBy: start)
} else {
startIndex = self.startIndex
} let endIndex: String.Index
if let end = to, end >= 0, end < self.characters.count {
endIndex = self.index(self.startIndex, offsetBy: end + 1)
} else {
endIndex = self.endIndex
} return String(self[startIndex ..< endIndex])
} func substring(from: Int) -> String {
return self.substring(from: from, to: nil)
} func substring(to: Int) -> String {
return self.substring(from: nil, to: to)
} func substring(from: Int?, length: Int) -> String {
guard length > 0 else {
return ""
} let end: Int
if let start = from, start > 0 {
end = start + length - 1
} else {
end = length - 1
} return self.substring(from: from, to: end)
} func substring(length: Int, to: Int?) -> String {
guard let end = to, end > 0, length > 0 else {
return ""
} let start: Int
if let end = to, end - length > 0 {
start = end - length + 1
} else {
start = 0
} return self.substring(from: start, to: to)
}
}
swift的String处理的更多相关文章
- Swift 中 String 取下标及性能问题
Swift 中 String 取下标及性能问题 取下标 String String 用 String.Index 取下标(subscript)得到 Character,String.Index 要从 ...
- Swift中String和NSString的一个不同之处
我们知道在Swift中String和NSString是可以互相转换使用的-额-应该是在绝大数情况下可以互相转换使用.在某些情况下可能还有一丝丝略微的差别:比如在涉及到处理字符串中字符索引的时候. 我们 ...
- [Swift]扩展String类:extension String
请参考本博客另一篇技术博文: <[Swift]字符串(String类.NSString类)常用操作> extension String { //获取字符串首字符 var first: St ...
- Swift的String与OC的NSString的区别
Swift的String类型是值类型.如果你创建了一个新的字符串值,那么当其进行常量.变量赋值操作或在函数/方法中传递时,会进行值拷贝. 在不同的情况下,都会对已有字符串值创建新的副本,并对该新副本进 ...
- Swift 01.String
1.字符串拼接 var num1 = "hello,world" var name = "xiaoming" var age = let student = n ...
- Swift - 16 - String.Index和Range
//: Playground - noun: a place where people can play import UIKit var str = "Welcome to Play Sw ...
- swift 中String常用操作
1. 字符串定义 var s = "aaaaaa" // 两个字符串均为空并等价. var emptyString = "" var anotherEmp ...
- Swift中String与NSDate的互相转换
其实每种编程语言,我都觉得String和日期对象的相互转换是一种十分麻烦的事情,Swift也不例外.这篇博客记录了我学到的String与NSDate的互相转换方法,供大家参考. 从String转为NS ...
- swift 设置string 中汉字中变色等处理代码
我们在做弹窗 或者显示label string的时候经常会用到字体变色 变大 等特殊处理, swift中提供一个函数 NSMutableAttributedString 使用方法简介 var main ...
- [Swift]字符串(String类、NSString类)常用操作
NS是Cocoa类对象类型的前缀,来源于乔布斯建立的另一家公司--NeXTNSString的使用方法,和Swift语言中的String有很多相似之处. 1.字符串的定义String类 var str1 ...
随机推荐
- BZOJ 4128 Matrix ——BSGS
矩阵的BSGS. 只需要哈希一下存起来就可以了. 也并不需要求逆. #include <map> #include <cmath> #include <cstdio> ...
- 刷题总结——卡牌配对(bzoj4205网络流)
题目: Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值 ...
- 使用腾讯互动直播 遇到的坑 'GLIBC_2.14' not found 问题解决
第一.查看系统glibc版本库 strings /lib64/libc.so.6 |grep GLIBC_ 这里我们可以看到系统中最新的版本是2.12,这里我们升级2.14. 第二.下载和安装glib ...
- android系统编译打开系统蓝牙
在项目配置文件ProjectConfig.mk中开启蓝牙以后,但是设置菜单中并没有出现蓝牙选项,最后发现是因为ProjectConfig.mk同级目录下没有蓝牙配置文件android.hardware ...
- Java远程调用BPS流程实现流程运行简单示例
1.简介:略 2.背景:略 3.目的:自我学习笔记 4.实现过程 (1).画出流程图 如下: 路由活动分支下的条件语句为复杂表达式: ((account<200&&divisio ...
- Redis集群模式配置
redis集群部署安装: https://blog.csdn.net/huwh_/article/details/79242625 https://www.cnblogs.com/mafly/p/re ...
- StoryBoard中,TableView位置总是在顶部出现空白的解决
重设TableView的 contentInset 属性可解决. _tableView.contentInset = UIEdgeInsetsMake( -30, 0, 0, 0);
- windows软件配置
1 安装jdk 配置环境变量 新建JAVA_HOME:D:\Program Files\Java\jdk1.8.0_151 新建JRE_HOME:D:\Program Files\Java\jre1. ...
- python3.x之print()
1.print内容 #!/usr/bin/python print('hello world') //print("hello world") 2.print变量 #!/us ...
- HDU_4770 Lights Against Dudely 状压+剪枝
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4770 Lights Against Dudely Time Limit: 2000/1000 MS ( ...