SwiftExtension:优化Swift开发过程的利器

发布时间:2023-05-23

一、简介

SwiftExtension 是一个优化 Swift 开发过程的开源框架,它包含了很多常用方法的拓展,能够节约我们开发时间,提高开发效率。同时,SwiftExtension 的功能模块化,方便我们按需引入。

二、常用方法

1. UIView+

UIView 拓展了很多对界面开发非常常用的方法,比如对 UIView 进行圆角、设置边框、添加阴影、设置渐变等。这些方法都是非常常用的,能够省去我们自己编写方法的时间。

extension UIView {
    // 对UIView进行圆角设置
    func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
        let maskPath = UIBezierPath(roundedRect: bounds,
                                    byRoundingCorners: corners,
                                    cornerRadii: CGSize(width: radius, height: radius))
        let maskLayer = CAShapeLayer()
        maskLayer.frame = bounds
        maskLayer.path = maskPath.cgPath
        layer.mask = maskLayer
    }
    // 在UIView上添加渐变效果
    func addGradientLayer(colors: [UIColor],
                          startPoint: CGPoint = CGPoint(x: 0, y: 0),
                          endPoint: CGPoint = CGPoint(x: 1, y: 1)) {
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds
        gradientLayer.colors = colors.map { $0.cgColor }
        gradientLayer.startPoint = startPoint
        gradientLayer.endPoint = endPoint
        layer.insertSublayer(gradientLayer, at: 0)
    }
}

2. UIImage+

UIImage 拓展了图片压缩、裁剪、旋转等功能,这些对于图片处理非常常见的方法,也借助 SwiftExtension 使得处理过程更加简单。

extension UIImage {
    // 将图片压缩至指定大小
    func compressed(maxSize: Int) -> UIImage? {
        guard let imageData = jpegData(compressionQuality: 1.0) else { return nil }
        if imageData.count < maxSize { return self }
        let compressionQuality = CGFloat(maxSize) / CGFloat(imageData.count)
        guard let compressedImageData = jpegData(compressionQuality: compressionQuality) else { return nil }
        return UIImage(data: compressedImageData)
    }
    // 将图片按比例裁剪
    func cropped(ratio: CGFloat) -> UIImage {
        guard let cgImage = cgImage else { return self }
        let height = CGFloat(cgImage.height)
        let width = CGFloat(cgImage.width)
        if height == width { return self }
        let rect: CGRect
        if height > width {
            let yOffset = (height - width) / 2
            rect = CGRect(x: 0, y: yOffset, width: width, height: width)
        } else {
            let xOffset = (width - height) / 2
            rect = CGRect(x: xOffset, y: 0, width: height, height: height)
        }
        guard let croppedCGImage = cgImage.cropping(to: rect) else { return self }
        return UIImage(cgImage: croppedCGImage)
    }
}

3. String+

String 拓展了很多字符串的处理方法,比如字符串是否为空、取中间字符、是否匹配正则表达式等。这些方法也是非常常用的。

extension String {
    // 判断字符串是否为空
    var isNotEmpty: Bool {
        return !isEmpty
    }
    // 获取两个字符串中间的子串
    func substring(with prefix: String, suffix: String) -> String? {
        guard let prefixRange = range(of: prefix), let suffixRange = range(of: suffix) else {
            return nil
        }
        let range = prefixRange.upperBound ..< suffixRange.lowerBound
        return String(self[range])
    }
    // 使用正则表达式判断字符串是否符合要求
    func validate(_ pattern: String) -> Bool {
        let regular = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
        let matchCount = regular?.numberOfMatches(in: self, options: [], range: NSRange(location: 0, length: count)) ?? 0
        return matchCount > 0
    }
}

三、代码示例

下面是一段使用 SwiftExtension 中拓展的 UIView 方法来设置一个 UIView 圆角和渐变效果的代码:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
view.backgroundColor = .white
view.roundCorners([.bottomLeft, .bottomRight], radius: 10)
view.addGradientLayer(colors: [.red, .yellow])

这段代码简明扼要,通过 SwiftExtension 中的方法,我们可以轻松地为一个 UIView 设置圆角和渐变效果,而不需要手写多余的代码。

四、总结

SwiftExtension 作为一个优化 Swift 开发过程的工具,提供了很多常用的方法拓展,能够让我们在编写 Swift 代码时更加轻松和高效。通过使用 SwiftExtension,我们可以节约时间,降低出错概率,并且提高代码的可读性和可维护性。