• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift学习-分类(Extensions)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在oc中为了增强已有类的功能,我们经常使用分类。使用分类,我们可以在不破坏原有类的结构的前提下,对原有类进行模块化的扩展。

但是在swift中没有分类这种写法了。相对应的是swift中只有扩展(Extensions)。

下面是swift中扩展(Extensions)的说明

扩展就是向一个已有的类、结构体、枚举类型或者协议类型添加新功能(functionality)。这包括在没有权限获取原始源代码的情况下扩展类型的能力(即逆向建模)。扩展和 Objective-C 中的分类(categories)类似。(不过与 Objective-C 不同的是,Swift 的扩展没有名字。)

下面是swift实现对UIView的分类:

extension UIView {
    //x
    var x:CGFloat {
        set{
            var oldFrame = self.frame
            oldFrame.origin.x = newValue;
            self.frame = oldFrame
        }
        get{
            return self.frame.origin.x
        }
    }
    //y
    var y:CGFloat {
        set{
            var oldFrame = self.frame
            oldFrame.origin.y = newValue;
            self.frame = oldFrame
        }
        get{
            return self.frame.origin.y
        }
    }
    //height
    var height:CGFloat {
        set{
            var oldFrame = self.frame
            oldFrame.size.height = newValue;
            self.frame = oldFrame
        }
        get{
            return self.frame.size.height
        }
    }
    //width
    var width:CGFloat {
        set{
            var oldFrame = self.frame
            oldFrame.size.width = newValue;
            self.frame = oldFrame
        }
        get{
            return self.frame.size.width
        }
    }
    
    //top
    var top:CGFloat {
        set{
            var oldFrame = self.frame
            oldFrame.origin.y = newValue;
            self.frame = oldFrame
        }
        get{
            return self.frame.origin.y
        }
    }
    //left
    var left:CGFloat {
        set{
            var oldFrame = self.frame
            oldFrame.origin.x = newValue;
            self.frame = oldFrame
        }
        get{
            return self.frame.origin.x
        }
    }
    //bottom
    var bottom:CGFloat {
        set{
            var oldFrame = self.frame
            oldFrame.origin.y = newValue - oldFrame.size.height;
            self.frame = oldFrame
        }
        get{
            return self.frame.origin.y + self.frame.size.height
        }
    }
    //right
    var right:CGFloat {
        set{
            var oldFrame = self.frame
            oldFrame.origin.x = newValue+oldFrame.size.width;
            self.frame = oldFrame
        }
        get{
            return self.frame.origin.x + self.frame.size.width
        }
    }
    //size
    var size:CGSize {
        set{
            var oldFrame = self.frame
            oldFrame.size = newValue
            self.frame = oldFrame
        }
        get{
            return self.frame.size
        }
    }
    //origin
    var origin: CGPoint{
        set{
            var oldFrame = self.frame
            oldFrame.origin = newValue;
            self.frame = oldFrame
        }
        get{
            return self.frame.origin
        }
    }
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift语言Auto Layout入门教程:上篇发布时间:2022-07-13
下一篇:
[Swift]LeetCode253.会议室 II $ Meeting Rooms II发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap