美文网首页Swift开发实战
Swift 为CGSize扩展数学运算符

Swift 为CGSize扩展数学运算符

作者: sprint | 来源:发表于2016-04-21 12:20 被阅读146次

    直奔主题

    let size = CGSizeMake(100, 50)
    

    如何将size扩大两倍? 你可能习惯这样写

       let size = CGSizeMake(100, 50)
       let size2 = CGSizeMake(width:2*size.width,height:2*size.height)
    

    看起来代码没什么问题 可以正常运行 ~~
    那么我们能否让size像普通数字一样使用数学运算符(+,-,*,/....)???

    如果你尝试这样写:

     let size = CGSizeMake(100, 50) * 2
    

    将会出现编译错误 因为 * 运算符默认不支持该类型 那么我们是否可以重写 * 运算符 让它具备这种功能 ?答案是可以的 下面我们就为CGSize添加扩展方法 让CGSize具备数学运算能力

    func *(l: CGSize,r: CGFloat)-> CGSize {
      return CGSize(width: r*l.width, height: r*l.height)
    }
    
    func /( l : CGSize, r: CGSize) -> CGSize {
        return CGSize(width:l.width/r.width,height:     l.height/r.height)
    }
    
    func*(l: CGSize,r: CGSize)-> CGSize{
        return CGSize(width: l.width*r.width, height:   l.height*r.height)
    }
    
    func -( l : CGSize, r: CGSize) -> CGSize {
        return CGSize(width:l.width-r.width,height: l.height-    r.height)
    }
    
    func -( l : CGPoint, r: CGPoint) -> CGPoint {
          return  CGPoint(x: l.x - r.x, y: l.y - r.y)
    }
    
    extension CGSize {
        var point: CGPoint {
           return CGPoint(x: self.width, y: self.height) }
    }
    

    该如何使用呢?
    沿用之前扩大2倍的需求

     let size = CGSizeMake(100, 50) 
     let size2 = size * 2
    

    甚至我们可以这样写

      let size2 = size * size
    

    是不是很酷?

    上述代码并没有难懂之处 也不算高深
    旨在提示大家 要善于利用Swift的特性 合理的设计代码

    欢迎关注个人公众号:DevTipss

    微信公众号:DevTipss

    本文完~

    相关文章

      网友评论

        本文标题:Swift 为CGSize扩展数学运算符

        本文链接:https://www.haomeiwen.com/subject/luagcttx.html