You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
5.5 KiB

//
// UIColor+HexColor.swift
// RxXMLY
//
// Created by sessionCh on 2017/12/14.
// Copyright © 2017 sessionCh. All rights reserved.
//
import UIKit
extension String {
// MARK:-
func getSize(fontSize: CGFloat) -> CGSize {
let str = self as NSString
let size = CGSize(width: UIScreen.main.bounds.width, height: CGFloat(MAXFLOAT))
return str.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: fontSize)], context: nil).size
}
// MARK:-
func getSize(font: UIFont) -> CGSize {
let str = self as NSString
let size = CGSize(width: UIScreen.main.bounds.width, height: CGFloat(MAXFLOAT))
return str.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil).size
}
// MARK:-
func hexStringToInt() -> Int {
let str = self.uppercased()
var sum = 0
for i in str.utf8 {
sum = sum * 16 + Int(i) - 48
if i >= 65 {
sum -= 7
}
}
return sum
}
func subStringStart(start: Int) -> String? {
let startIndex = self.index(self.startIndex, offsetBy: start)
return String(self.suffix(from: startIndex))
}
func weekRegion() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.date(from: self)
let currentStartWeek = date?.startOfWeek
let startWeekStr = dateFormatter.string(from: currentStartWeek!)
let currentEndWeek = date?.endOfWeek
let endWeekStr = dateFormatter.string(from: currentEndWeek!)
let startWeek = startWeekStr.pregReplace(pattern: "-", with: "/")
let endWeek = endWeekStr.pregReplace(pattern: "-", with: "/")
let region = [startWeek, endWeek]
return region.joined(separator: "-")
}
//(2018-08-14)
func startOfMonth() -> String {
var startDateStr: String = ""
let comps = self.components(separatedBy: "-")
if comps.count == 3 {
let calendar = NSCalendar.current
var startComps = DateComponents()
startComps.day = 1
startComps.month = (comps[1] as NSString).integerValue
startComps.year = (comps[0] as NSString).integerValue
let startDate = calendar.date(from: startComps)!
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
startDateStr = dateFormatter.string(from: startDate)
}
return startDateStr
}
//(2018-08-14)
func endOfMonth() -> String {
var endDateStr: String = ""
let comps = self.components(separatedBy: "-")
if comps.count == 3 {
let calendar = NSCalendar.current
var components = DateComponents()
components.month = 1
components.day = -1
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let startDate = dateFormatter.date(from: self.startOfMonth())
let endDate = calendar.date(byAdding: components,
to: startDate!)
endDateStr = dateFormatter.string(from: endDate!)
}
return endDateStr
}
func monthRegion() -> String {
let startMonthStr = self.startOfMonth()
let endMonthStr = self.endOfMonth()
let startMonth = startMonthStr.pregReplace(pattern: "-", with: "/")
let endMonth = endMonthStr.pregReplace(pattern: "-", with: "/")
let region = [startMonth, endMonth]
return region.joined(separator: "-")
}
///
///
/// - Parameters:
/// - from:
/// - to:
/// - Returns:
func transformDateStrFormatter(from: String, to: String) -> String {
let fromFormatter = DateFormatter()
fromFormatter.dateFormat = from
let fromDate = fromFormatter.date(from: self)
let toFormatter = DateFormatter()
toFormatter.dateFormat = to
let toDateStr = toFormatter.string(from: fromDate!)
return toDateStr
}
///
///
/// - Returns: true:false:
func isLinkUrl() -> Bool {
let regex = "[a-zA-Z]+://[^\\s]*"
let regexLink = NSPredicate(format: "SELF MATCHES %@",regex)
if self.isEmpty || regexLink.evaluate(with: self) == false {
return false
}
return true
}
///
var verticalStr: String {
var newStr = ""
for char in self {
newStr.append(char)
newStr.append("\n")
}
return newStr
}
}
extension String {
// => Int
var integerValue: Int {
return (self as NSString).integerValue
}
var floatValue: Float {
return (self as NSString).floatValue
}
func pregReplace(pattern: String, with: String, options: NSRegularExpression.Options = []) -> String {
let regex = try! NSRegularExpression(pattern: pattern, options: options)
return regex.stringByReplacingMatches(in: self, options: [], range: NSMakeRange(0, self.count), withTemplate: with)
}
}