Latest 1.0.7
Homepage https://github.com/chkkassd/SwiftDevUtility
License MIT
Platforms ios 11.0
Authors

Version status
Platform support
License
Language
Carthage compatible
996.icu

A Swift development tool which can make your programming easy.

Table of Contents

  • General info
  • Requirement
  • Installation
  • Usage
  • Contact
  • License

    General info

    This tool provides some useful functions which can be often used in your programming.It extends some Swift Standard Library and create some useful structs.

    Requirement

  • iOS 11+
  • Swift 4.2

    Installation

    Cocoapods:

    pod 'SwiftDevUtility'

    Carthage:

    github "chkkassd/SwiftDevUtility"

    Usage

  • StringExtension
    • public var md5String: String
    • public var convertedDate: Date?
    • public static func timeFormatString(_ seconds: Double) -> String
  • ArrayExtension
    • public func reject(_ predicate: (Element) -> Bool) -> [Element]
    • public func allMatch(_ predicate: (Element) -> Bool) -> Bool
  • DictionaryExtension
    • public mutating func merge<S>(_ sequence: S) where S: Sequence, S.Iterator.Element == (key: Key, value: Value)
    • public init<S: Sequence>(_ sequence: S) where S.Iterator.Element == (key: Key, value: Value)
    • public func valueMap<T>(_ transform:(Value) -> T) -> [Key:T]
  • SequenceExtension
    • public func unique() -> [Iterator.Element]
  • DateExtension
    • public var standardTimeString: String
    • public var weekdayIndex: Int?
    • public var weekdayEnum: WeekDay
    • public var weekdayString: String
    • public var firstDayDate: Date?
    • public var lastDayDate: Date?
  • URLExtension
    • public var pathString: String?
  • UIImageExtension
    • public func scaledImage(_ rect: CGRect, _ compressionQuality: CGFloat) -> UIImage?
  • UIViewExtension
    • @IBInspectable public var viewCornerRadius: CGFloat
    • @IBInspectable public var viewBorderWidth: CGFloat
    • @IBInspectable public var viewBorderColor: UIColor
  • AppInfoHelper
    • public static var appVersion: String?
    • public static var appBuildVersion: String?
    • public static var appName: String?
  • DirectoryPath
    • public static func pathOfDocuments() -> String
    • public static func pathOfTemporary() -> String
    • public static func pathOfCache() -> String
    • public static func urlInDocument(with component: String) -> URL
    • public static func urlInTemporary(with component: String) -> URL
    • public static func urlInCache(with component: String) -> URL
    • public static func directoryPathInDocument(withDirectoryName name: String) -> String
    • public static func directoryURLInDocument(withDirectoryName name: String) -> URL
  • ScreenShot
    • public static func screenShot(withView view: UIView) -> UIImage?
  • SSFSortDescriptor

    StringExtension

    public var md5String: String

    A read-only computed property that return the md5 string from the origin string.

    "Hello world".md5String//3e25960a79dbc69b674cd4ec67a72c62

    public var convertedDate: Date?

    Convert a ISO8601 string(yyyy-MM-dd’T’HH:mm:ssZ) to Date.

    let time = "2019-3-12T12:34:23+0000"
    let dateTime = time.convertedDate//Optional(2019-03-12 12:34:23 +0000)

    public static func timeFormatString(_ seconds: Double) -> String

    Convert seconds to a string with style of "mm:ss"

    String.timeFormatString(188.8)//03:08

    ArrayExtension

    public func reject(_ predicate: (Element) -> Bool) -> [Element]

    Delete the element which matchs the predicate.

    let a = [1,2,3,4,5,6]
    let b = a.reject{$0 % 2 == 0}//[1,3,5]

    public func allMatch(_ predicate: (Element) -> Bool) -> Bool

    Weather all elements match the predicate.

    let a = [1,2,3,4,5,6]
    let c = a.allMatch{$0 > 0}//true

    DictionaryExtension

    public mutating func merge<S>(_ sequence: S) where S: Sequence, S.Iterator.Element == (key: Key, value: Value)

    Merge a sequence into a dictionary.

    var a = ["name": "jack", "age": "10"]
    let b = ["name": "Tom", "age": "10", "address": "shanghai"]
    a.merge(b)//["address": "shanghai", "age": "10", "name": "Tom"]

    init<S: Sequence>(_ sequence: S) where S.Iterator.Element == (key: Key, value: Value)

    Initail a dictionary by a sequence,such as [(key:xx, value:xx)].

    let c = [("name", "Peter"), ("age", "20")]
    let d = Dictionary(c)//["age": "20", "name": "Peter"]

    public func valueMap<T>(_ transform:(Value) -> T) -> [Key:T]

    A dictionary’s value map to a new value with the transform,then return a new dictionary.

    let e = ["height": 80, "width": 100]
    let f = e.valueMap { $0 / 2 }//["height": 40, "width": 50]

    SequenceExtension

    public func unique() -> [Iterator.Element]

    Find the unique element in the sequence,it will drop the repeated element.

    let a = [1,2,3,4,4,8,8]
    let b = a.unique()//[1, 2, 3, 4, 8]

    DateExtension

    public var standardTimeString: String

    Convert date to string(yyyy-MM-dd HH:mm:ss)

    let date = Date()
    date.standardTimeString//"2019-03-06 14:14:34"

    public var weekdayIndex: Int?

    Convert a date to weekdayIndex(saturday is 0, sunday is 1, Monday is 2,…).

    let date = Date()
    date.weekdayIndex//Optional(4)

    public var weekdayEnum: WeekDay

    Convert a date to weekday enum..

    let date = Date()
    date.weekdayEnum//WED

    public var weekdayString

    Convert a date to chinese weekday string.

    let date = Date()
    date.weekdayString//"周三"

    public var firstDayDate: Date?

    Fetch the first day of a week by a date.

    let date = Date()
    date.firstDayDate//Optional(2019-03-02 06:14:34 +0000)

    public var lastDayDate: Date?

    Fetch the last day of a week by a date.

    let date = Date()
    date.lastDayDate//Optional(2019-03-08 06:14:34 +0000)

    URLExtension

    public var pathString: String?

    Convert a file url to a path string

    let fileURL = DirectoryPath.urlInDocument(with: "test")//file:///Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/099F3AE8-8743-4466-B147-F84A91AE8C17/Documents/test
    let filePath = fileURL.pathString//Optional("/Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/099F3AE8-8743-4466-B147-F84A91AE8C17/Documents/test")

    UIImageExtension

    public func scaledImage(_ rect: CGRect, _ compressionQuality: CGFloat) -> UIImage?

    Scale a big image to a small image with specifial rect.

    let aImage = UIImage(named: "water")
    aImage.size//Optional((180.0, 180.0))
    let bImage = aImage?.scaledImage(CGRect(x: 0, y: 0, width: 20, height: 20), 1.0)
    bImage.size//Optional((20.0, 20.0))

    UIViewExtension

    @IBInspectable public var viewCornerRadius: CGFloat

    Discribe corner radius of a view and reflect in storyboard.

    @IBInspectable public var viewBorderWidth: CGFloat

    Discribe border width of a view and reflect in storyboard.

    @IBInspectable public var viewBorderColor: UIColor

    Discribe border color of a view and reflect in storyboard.

    AppInfoHelper

    public static var appVersion: String?

    Fetch the app version.

    AppInfoHelper.appVersion//Optional("1.0.1")

    public static var appBuildVersion: String?

    Fetch the app build version

    AppInfoHelper.appBuildVersion//Optional("1")

    public static var appName: String?

    Fetch the app name

    AppInfoHelper.appName//Optional("SwiftDevUtilityDemo")

    DirectoryPath

    public static func pathOfDocuments() -> String

    Document directory path

    DirectoryPath.pathOfDocuments()// /Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/11F3E559-1365-473D-AFA5-C7C10AD2800A/Documents

    public static func pathOfTemporary() -> String

    Temporary directory path

    DirectoryPath.pathOfTemporary()// /Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/11F3E559-1365-473D-AFA5-C7C10AD2800A/tmp/

    public static func pathOfCache() -> String

    Cache directory path

    DirectoryPath.pathOfCache()// /Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/11F3E559-1365-473D-AFA5-C7C10AD2800A/Library/Caches

    public static func urlInDocument(with component: String) -> URL

    Create URL in document compent

    DirectoryPath.urlInDocument(with: "haha")//file:///Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/11F3E559-1365-473D-AFA5-C7C10AD2800A/Documents/haha

    public static func urlInTemporary(with component: String) -> URL

    Create URL in temporary compent

    DirectoryPath.urlInTemporary(with: "hihi")//file:///Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/331A1DE9-81A4-4322-88BD-334E34AEBD06/tmp/hihi

    public static func urlInCache(with component: String) -> URL

    Create URL in cache compent

    DirectoryPath.urlInCache(with: "hehe")//file:///Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/331A1DE9-81A4-4322-88BD-334E34AEBD06/Library/Caches/hehe

    public static func directoryPathInDocument(withDirectoryName name: String) -> String

    Creat directory path at document directory.

    DirectoryPath.directoryPathInDocument(withDirectoryName: "test1")// /Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/331A1DE9-81A4-4322-88BD-334E34AEBD06/Documents/test1

    public static func directoryURLInDocument(withDirectoryName name: String) -> URL

    Creat directory URL at document directory

    DirectoryPath.directoryURLInDocument(withDirectoryName: "test2")//file:///Users/xxx/Library/Developer/CoreSimulator/Devices/761F483C-6A5C-4A4F-8F3C-7FDABBEC5A86/data/Containers/Data/Application/331A1DE9-81A4-4322-88BD-334E34AEBD06/Documents/test2

    ScreenShot

    public static func screenShot(withView view: UIView) -> UIImage?

    Crop a specific view

    let image = SSFScreenShot.screenShot(withView: aView)//It will crop aView and return a image

    SSFSortDescriptor

    public typealias SortDescriptor<T> = (T, T) -> Bool

    The documention of the function type (T, T) -> Bool.

    infix operator |>: LogicalDisjunctionPrecedence
    public func |><T>(l: @escaping SortDescriptor<T>, r: @escaping SortDescriptor<T>) -> SortDescriptor<T>

    Mix operator with two SortDescriptor type.

    public static func makeDescriptor<Key, Value>(key: @escaping (Key) -> Value, _ isAscending: @escaping (Value, Value) -> Bool) -> SortDescriptor<Key>

    Create the specific sortDescriptor by the sorted data and the sorted methods.
    Parameter: key is a function which returns the real sorted value.
    Parameter: isAscending is a function which comapre the sorted value.
    Return: A SortDescriptor function which use key and isAscending.

    SortedDescriptor Example
    
    struct Dog {
    var name: String = ""
    var age: Int = 0
    }

let dog1 = Dog(name: "laifu", age: 4)
let dog2 = Dog(name: "xiaohu", age: 3)
let dog3 = Dog(name: "dingdang", age: 8)
let dog4 = Dog(name: "laifu", age: 6)
let dog5 = Dog(name: "laifu", age: 9)
let dogs = [dog1, dog2, dog3, dog4, dog5]

let nameSortDescriptor: SortDescriptor = SSFSortDescriptor.makeDescriptor(key: {$0.name}, >)
let ageSortDescriptor: SortDescriptor = SSFSortDescriptor.makeDescriptor(key: {$0.age}, >)

let newDogs = dogs.sorted(by: nameSortDescriptor |> ageSortDescriptor)
print(newDogs)//[Dog(name: "xiaohu", age: 3), Dog(name: "laifu", age: 9), Dog(name: "laifu", age: 6), Dog(name: "laifu", age: 4), Dog(name: "dingdang", age: 8)]


## Contact
* Email:[email protected]
* Weibo:[@PeterShi](https://weibo.com/u/2138535555)
## License
SwiftDevUtility is released under the MIT license. See [LICENSE](https://github.com/chkkassd/SwiftDevUtility/blob/master/LICENSE) for details.

Latest podspec

{
    "name": "SwiftDevUtility",
    "version": "1.0.7",
    "summary": "Useful functions of Swift development",
    "description": "SwiftDevUtility is a useful development tool which can make your programming easy.",
    "homepage": "https://github.com/chkkassd/SwiftDevUtility",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "Peter Shi": "[email protected]"
    },
    "source": {
        "git": "https://github.com/chkkassd/SwiftDevUtility.git",
        "tag": "1.0.7"
    },
    "platforms": {
        "ios": "11.0"
    },
    "source_files": [
        "SwiftDevUtility/**/*.swift",
        "SwiftDevUtility/Supportting/SwiftDevUtility.h"
    ],
    "swift_version": "5.0"
}

Pin It on Pinterest

Share This