在swift中优雅的扩展CGRect

在swift中优雅的扩展CGRect

swift 给我我们iOS开发者很多惊喜, 基本上用过swift就觉得,就不想再用OC了,多了不解释

OC中CGRect用法

其实这里可以用省略一万字来写 ,但还是扯一扯。。。

在这里插入图片描述

这是OC里面的写法,

 self.frame = CGRectMake(0b10, 1.09, 22.0f, 0x222);

无论你是 ,整数二进制还是十六进制还是多少进制,都可以帮你隐式转出CGFloat

在这里插入图片描述
{char, uchar, short, ushort}->int-> uint->long->ulong->float->double

也就是 这段代码在OC是编译运行是没有问题的

 	char c = 'c';
    int j = 0 + c;
    float k = j + 1.0f;
    double d = k + 1.0;

这些都属于基本数据类型,OC 睁一只眼闭一只眼

swift中CGRect用法

在swift里面很多东西发生了变化

@frozen public struct CGFloat {

}
@frozen public struct Int{

}

@frozen public struct Double{

}

基本数据类型都变成了封装类了,这个就很尴尬了。

更可气的是
在这里插入图片描述
CGRect的构造方法,要么都传整,要么都传浮点,要么滚蛋

在这里插入图片描述
假如我就要这么写,而且还不能让他出错 ,这个时候就需要对Rect扩展了,具体怎么扩展 ,上代码

import UIKit

public protocol BasicDataType {
    
}

extension Int: BasicDataType {
}

extension UInt: BasicDataType {
}

extension Float: BasicDataType {
}

extension Double: BasicDataType {
}

extension CGFloat: BasicDataType {
    
}

extension BasicDataType {
    internal var fvalue: CGFloat {
        let offset: CGFloat
        if let amount = self as? Float {
            offset = CGFloat(amount)
        } else if let amount = self as? Double {
            offset = CGFloat(amount)
        } else if let amount = self as? CGFloat {
            offset = CGFloat(amount)
        } else if let amount = self as? Int {
            offset = CGFloat(amount)
        } else if let amount = self as? UInt {
            offset = CGFloat(amount)
        } else {
            offset = 0.0
        }
        return offset
    }
}

extension CGRect {
    init(_ x:BasicDataType , _ y:BasicDataType, _ width:BasicDataType , _ height: BasicDataType){
        self.init(x: x.fvalue, y: y.fvalue, width: width.fvalue, height: height.fvalue)
    }
    
}

优雅的使用,深藏功与名

let rect = CGRect(1.0, 0x3, 3.3, 333)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值