Swift:数据类型转换的 Extension

JKSwiftExtension,测试用例在 FoundationExtensionViewController.swift 对应的控制器里面
目录:
1、Double+Extension
2、Int+Extension
3、Int64+Extension
4、CGFloat+Extension
5、Character+Extension
6、Bool+Extension
7、UInt+Extension
8、Float+Extension

一、Double+Extension

// MARK:- 一、Double 的基本转换
extension Double {

    // MARK: 1.1、转 Int
    /// 转 Int
    public var int: Int { return Int(self) }

    // MARK: 1.2、转 CGFloat
    /// 转 CGFloat
    public var cgFloat: CGFloat { return CGFloat(self) }

    // MARK: 1.3、转 Int64
    /// 转 Int64
    public var int64: Int64 { return Int64(self) }

    // MARK: 1.4、转 Float
    /// 转 Float
    public var float: Float { return Float(self) }

    // MARK: 1.5、转 String
    /// 转 String
    public var string: String { return String(self) }

    // MARK: 1.6、转 NSNumber
    /// 转 NSNumber
    public var number: NSNumber { return NSNumber.init(value: self) }

    // MARK: 1.7、转 Double
    /// 转 Double
    public var double: Double { return self }
}

二、Int+Extension

// MARK:- 一、Int 与其他类型的转换
public extension Int {

    // MARK: 1.1、转 Double
    /// 转 Double
    var toDouble: Double { return Double(self) }

    // MARK: 1.2、转 Float
    /// 转 Float
    var toFloat: Float { return Float(self) }

    // MARK: 1.3、转 Int64
    /// 转 Int64
    var toInt64: Int64 { return Int64(self) }

    // MARK: 1.4、转 CGFloat
    /// 转 CGFloat
    var toCGFloat: CGFloat { return CGFloat(self) }

    // MARK: 1.5、转 String
    /// 转 String
    var toString: String { return String(self) }

    // MARK: 1.6、转 UInt
    /// 转 UInt
    var toUInt: UInt { return UInt(self) }

    // MARK: 1.7、转 range
    /// 转 range
    var range: CountableRange { return 0..) -> Int {
        let delta = within.upperBound - within.lowerBound
        return within.lowerBound + Int(arc4random_uniform(UInt32(delta)))
    }

    // MARK: 2.2、转换万单位
    /// 转换万的单位
    /// - Parameter scale: 小数点后舍入值的位数,默认 1 位
    /// - Returns: 返回万的字符串
    func toTenThousandString(scale: Int = 1) -> String {
        if self < 0 {
            return "0"
        } else if self <= 9999 {
            return "\(self)"
        } else {
            let doub = CGFloat(self) / 10000
            let str = String(format: "%.\(scale)f", doub)
           let start_index = str.index(str.endIndex, offsetBy: -1)
            let suffix = String(str[start_index ..< str.endIndex])
            if suffix == "0" {
                let toIndex = str.index(str.endIndex, offsetBy: -2)
                return String(str[str.startIndex ..< toIndex]) + "万"
            } else {
                return str + "万"
            }
        }
    }
}

三、Int64+Extension

// MARK:- 一、Int64 与其他类型的转换
public extension Int64 {

    // MARK: 1.1、转 Int
    /// 转 Int
    var toInt: Int {
        return Int(self)
    }
    // MARK: 1.2、转 CGFloat
    /// 转 CGFloat
    var toCGFloat: CGFloat {
        return CGFloat(self)
    }
    // MARK: 1.3、转 Float
    /// 转 Float
    var toFloat: Float {
        return Float(self)
    }
    // MARK: 1.4、转 Double
    /// 转 Double
    var toDouble: Double {
        return Double(self)
    }
    // MARK: 1.5、转 String
    /// 转 String
    var toString: String {
        return String(self)
    }
    // MARK: 1.6、转 NSNumber
    /// 转 NSNumber
    var toNumber: NSNumber {
        return NSNumber.init(value: self)
    }
    // MARK: 1.7、转 Int64
    /// 转 Int64
    var toInt64: Int64 {
        return self
    }
}

四、CGFloat+Extension

// MARK:- 一、CGFloat 的基本转换
extension CGFloat {

    // MARK: 1.1、转 Int
    /// 转 Int
    public var int: Int { return Int(self) }

    // MARK: 1.2、转 CGFloat
    /// 转 CGFloat
    public var cgFloat: CGFloat { return self }

    // MARK: 1.3、转 Int64
    /// 转 Int64
    public var int64: Int64 { return Int64(self) }

    // MARK: 1.4、转 Float
    /// 转 Float
    public var float: Float { return Float(self) }

    // MARK: 1.5、转 String
    /// 转 String
    public var string: String { return String(self.double) }

    // MARK: 1.6、转 NSNumber
    /// 转 NSNumber
    public var number: NSNumber { return NSNumber.init(value: self.double) }

    // MARK: 1.7、转 Double
    /// 转 Double
    public var double: Double { return Double(self) }
}

// MARK:- 二、角度和弧度相互转换
extension CGFloat {

    // MARK: 角度转弧度
    /// 角度转弧度
    /// - Returns: 弧度
    public func degreesToRadians() -> CGFloat {
        return (.pi * self) / 180.0
    }

    // MARK: 弧度转角度
    /// 角弧度转角度
    /// - Returns: 角度
    public func radiansToDegrees() -> CGFloat {
        return (self * 180.0) / .pi
    }
}

五、Character+Extension

// MARK:- 一、Character 与其他类型的转换
public extension Character {

    // MARK: 1.1、Character 转 String
    /// Character 转 String
    var toString: String { return String(self) }

    // MARK: 1.2、Character 转 Int
    /// Character 转 Int
    var toInt: Int? { return Int(String(self)) }
}

// MARK:- 二、常用的属性和方法
public extension Character {

    // MARK: 2.1、判断是不是 Emoji 表情
    /// 判断是不是 Emoj 表情
    var isEmoji: Bool {
        return String(self).includesEmoji()
    }
}

六、Bool+Extension

// MARK:- 一、基本的扩展
public extension Bool {

    // MARK: 1.1、Bool 值转 Int
   /// Bool 值转 Int
    var toInt: Int { return self ? 1 : 0 }
}

七、UInt+Extension

// MARK:- 一、UInt 与其他类型的转换
extension UInt {
    // MARK: 1.1、转 Int
    /// 转 Int
    public var toInt: Int { return Int(self) }
}

八、Float+Extension

// MARK:- 一、Float 与其他类型的转换
extension Float {

    // MARK: 1.1、转 Int
    /// 转 Int
    public var int: Int { return Int(self) }

    // MARK: 1.2、转 CGFloat
    /// 转 CGFloat
    public var cgFloat: CGFloat { return CGFloat(self) }

    // MARK: 1.3、转 Int64
    /// 转 Int64
    public var int64: Int64 { return Int64(self) }

    // MARK: 1.4、转 Double
    /// 转 Double
    public var double: Double { return Double(self) }

    // MARK: 1.5、转 String
    /// 转 String
    public var string: String { return String(self) }

    // MARK: 1.6、转 NSNumber
    /// 转 NSNumber
    public var number: NSNumber { return NSNumber.init(value: self) }

    // MARK: 1.7、转 Float
    /// 转 Float
    public var float: Float { return self }
}

// MARK:- 二、其他常用的方法
public extension Float {

    // MARK: 2.1、浮点数四舍五入
    /// 浮点数四舍五入,places
    /// - Parameter places: 小数保留的位数
    /// - Returns: 保留后的小数
    func roundTo(places: Int) -> Float {
        let divisor = pow(10.0, Float(places))
        return (self * divisor).rounded() / divisor
    }
}

你可能感兴趣的:(Swift:数据类型转换的 Extension)