String+Extenstion.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. //
  2. // String+Extenstion.swift
  3. // o2app
  4. //
  5. // Created by 刘振兴 on 2017/8/18.
  6. // Copyright © 2017年 zone. All rights reserved.
  7. //
  8. import Foundation
  9. import UIKit
  10. extension String {
  11. /// 字符串时间转 Date
  12. ///
  13. /// - Parameter formatter: 字符串时间的格式 yyyy-MM-dd/YYYY-MM-dd/HH:mm:ss/yyyy-MM-dd HH:mm:ss
  14. /// - Returns: Date
  15. func toDate(formatter: String) -> Date {
  16. let dateFormatter = DateFormatter()
  17. dateFormatter.locale = Locale.current
  18. dateFormatter.dateFormat = formatter
  19. let date = dateFormatter.date(from: self)
  20. return date!
  21. }
  22. func subString(from: Int, to: Int? = nil) -> String {
  23. if from >= self.length {
  24. return self
  25. }
  26. let startIndex = self.index(self.startIndex, offsetBy: from)
  27. if to == nil {
  28. return String(self[startIndex..<self.endIndex])
  29. }else {
  30. if from >= to! {
  31. return String(self[startIndex..<self.endIndex])
  32. }else {
  33. let endIndex = index(self.startIndex, offsetBy: to!)
  34. return String(self[startIndex..<endIndex])
  35. }
  36. }
  37. }
  38. /// 计算文本的高度
  39. func textHeight(fontSize: CGFloat, width: CGFloat) -> CGFloat {
  40. return self.boundingRect(with: CGSize(width: width, height: CGFloat(MAXFLOAT)), options: .usesLineFragmentOrigin, attributes: [.font: UIFont.systemFont(ofSize: fontSize)], context: nil).size.height
  41. }
  42. // MARK: - URL允许的字符
  43. var urlEscaped: String {
  44. return self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
  45. }
  46. // MARK:- 获取字符串的CGSize
  47. func getSize(with fontSize: CGFloat) -> CGSize {
  48. let str = self as NSString
  49. let size = CGSize(width: UIScreen.main.bounds.width, height: CGFloat(MAXFLOAT))
  50. return str.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: fontSize)], context: nil).size
  51. }
  52. // MARK:- 获取文本图片
  53. func getTextImage(_ size:CGSize,textColor tColor:UIColor,backColor bColor:UIColor,textFont tFont:UIFont) -> UIImage? {
  54. let label = UILabel(frame: CGRect(origin:CGPoint(x:0,y:0), size: size))
  55. label.textAlignment = .center
  56. label.textColor = tColor
  57. label.font = tFont
  58. label.text = self
  59. label.backgroundColor = bColor
  60. UIGraphicsBeginImageContextWithOptions(label.frame.size, true, 0)
  61. guard let context = UIGraphicsGetCurrentContext() else { return nil }
  62. label.layer.render(in: context)
  63. let image = UIGraphicsGetImageFromCurrentImageContext()
  64. UIGraphicsEndImageContext()
  65. return image
  66. }
  67. subscript(r: Range<Int>) -> String {
  68. get {
  69. let startIndex = self.index(self.startIndex, offsetBy: r.lowerBound)
  70. let endIndex = self.index(self.startIndex, offsetBy: r.upperBound)
  71. return String(self[startIndex..<endIndex])
  72. }
  73. }
  74. subscript(r: ClosedRange<Int>) -> String {
  75. get {
  76. let startIndex = self.index(self.startIndex, offsetBy: r.lowerBound)
  77. let endIndex = self.index(self.startIndex, offsetBy: r.upperBound)
  78. return String(self[startIndex...endIndex])
  79. }
  80. }
  81. static func randomString(length:Int) -> String {
  82. let charSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  83. var c = charSet.map { String($0) }
  84. var s:String = ""
  85. for _ in (1...length) {
  86. s.append(c[Int(arc4random()) % c.count])
  87. }
  88. return s
  89. }
  90. }