Swift-Extensions

日常开发中,frame 是我们经常用到的,但是 UIKit 不允许我们直接设置 frame.origin.x frame.origin.y frame.size.wight frame.size.height。

我们只能通过下面几种方式设置frame:

1) 取出 frame 然后设置后 在设置回去

var customFrame = anyView.frame

customFrame.origin.x = 10.0

anyView.frame = customFrame

 

 

2) 新定义一个 然后整体赋值

let customFrame = CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0)

anyView.frame = customFrame

 

在Swift中我们可以实现现有类的 Extensions(在oc中使用 Category 来实现) 来实现 anyView.frame.x = 10.0 这样的代码,这样的话就不用整体设置,代码也简洁的多了。

既然是设置 frame ,那么我们需要扩展的类就是 UIView ,Swift 中在类的前面使用 extension 关键字标记是扩展类,代码如下:

复制代码
extension UIView {
    var x: CGFloat {
        get {
            return frame.origin.x
        }
        
        set {
            var tmpFrame = frame
            
            tmpFrame.origin.x = newValue
            
            frame = tmpFrame
        }
    }
    
    var y: CGFloat {
        get {
            return frame.origin.y
        }
        
        set {
            var tmpFrame = frame
            
            tmpFrame.origin.y = newValue
            
            frame = tmpFrame
        }
    }
    
    var height: CGFloat {
        get {
            return frame.size.height
        }
        
        set {
            var tmpFrame = frame
            
            tmpFrame.size.height = newValue
            
            frame = tmpFrame
        }
    }
    
    var width: CGFloat {
        get {
            return frame.size.width
        }
        
        set {
            var tmpFrame = frame
            
            tmpFrame.size.width = newValue
            
            frame = tmpFrame
        }
    }
}
复制代码

 

看代码其实很简单,只是把一些需要的操作封装在扩展类中了。

 

posted @   sims  阅读(139)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示