美文网首页iOS开发
Swift 分类中的只读计算属性的运用

Swift 分类中的只读计算属性的运用

作者: seasonZhu | 来源:发表于2017-12-15 14:14 被阅读10次

我们都知道在OC中,在分类中增加新的属性是会报错的,如果非要增加属性比较使用runtime大招才行
这个状况在Swift中有所改善,我们可以很简单的在分类中增加只读计算属性,进行使用与方法的扩展


可能到这里,大家对于只读与计算属性都有些晕,慢慢听我解释

首先说只读,所谓只读就是属性只有get方法,即无法对该属性进行赋值

所谓计算属性,其实是相对于存储属性的,在我理解,非直接对属性赋值而创建的属性都是计算属性

我们来看下面这个例子


image.png

在分类中,直接使用存储属性,编译器会直接报错,而使用只读存储属性就不会报错


接下来,我们再来说一下类的计算属性与对象的计算属性


image.png

使用分类的对象只读属性,必须先创建了对象才能使用,而使用分类的类的只读计算属性,直接在类后面点即可,这样简洁又高效!


如何使用?
其实上面写的颜色分类,已经给出了一个比较好的使用例子
我们想自定义一个颜色,是我们App的主题色,我们在OC的时候可以这样用

  1. 定义宏
  2. 使用分类方法

使用宏就不讨论了,因为在Swift里面已经没有宏这个用法,不过可以定义一个颜色常量进行赋值

这个时候我们在OC中一般这样写

颜色的分类

@implementation UIColor (Extension)

+ (UIColor *)main{
    return [UIColor colorWithRed: 0.1
                           green: 0.2
                            blue: 0.3
                           alpha:1.0f] 
}

@end

使用的时候

view.backgroundColor = [UIColor main]

按照这个逻辑,在Swift中也可以这样写

extension UIColor {
    
    /// main 这个函数系统有,不能使用,所以使用的mainColor
    ///
    /// - Returns: <#return value description#>
    class func mainColor() -> UIColor {
        return UIColor(red: 0.1, green: 0.2, blue: 0.3, alpha: 1)
    }
}


class testViewController: UIViewController {
    override func viewDidLoad() {
        view.backgroundColor = UIColor.mainColor()
    }
}

我们使用分类的只读计算属性也可以这样写
是不是和系统的颜色写法一模一样,而且清晰!?

extension UIColor {
    
    class var main: UIColor {
        return UIColor(red: 0.1, green: 0.2, blue: 0.3, alpha: 1.0)
    }
    
}


class testViewController: UIViewController {
    override func viewDidLoad() {
        view.backgroundColor = UIColor.main
    }
}

我后来思考了一下,其实只要是无入参而有出参的函数方法,都可以简化写成计算属性,这样运用起来更加简单

相关文章

  • Swift 分类中的只读计算属性的运用

    我们都知道在OC中,在分类中增加新的属性是会报错的,如果非要增加属性比较使用runtime大招才行这个状况在Swi...

  • OC的@property与Swift的存储属性/计算属性类比

    Swift中的计算属性/存储属性与OC中的@property   Swift中引入了存储属性、计算属性的概念,存储...

  • 浅谈 Swift 中的属性(Property)

    Properties in Swift 前言 Swift 中的属性分为存储属性与计算属性,存储属性即为我们平时常用...

  • Swift进阶(三)--- 属性

    Swift的属性 在swift中,属性主要分为以下几种: 存储属性 计算属性 延迟存储属性 类型属性 一:存储属性...

  • Swift 属性

    Swift 属性 在Swift中属性主要分为存储属性、计算属性、延迟存储属性、类型属性这四种,并且Swift还提供...

  • 属性和方法

    1、属性 存储属性 延迟存储属性 计算属性 只读计算属性 只有 getter 方法但没有 setter 方法的计算...

  • Swift入门基础6——扩展、泛型、协议

    扩展 Swift中的扩展,对应OC中的分类,可以用它来拓展类的功能。 可以扩展类的什么: 添加新的属性(只能是计算...

  • Swift入门三(知识点)

    可选项 解包: 懒加载 懒加载Swift和OC的区别 getter 和setter 只读属性(计算型函数,有返回值...

  • Swift 计算属性、存储属性

    属性 Swift中的属性分为存储属性(sorted variable)和计算型属性(computed variab...

  • 使用协议的注意项

    协议中定义的属性 1.协议中定义的只读属性,在实现协议的类型中既可以定义为只读的计算属性,也可以根据需要设置为可读...

网友评论

    本文标题:Swift 分类中的只读计算属性的运用

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