美文网首页iOS开发总结Swift 5.x 学习之旅
swift学习之旅--set和get的重写

swift学习之旅--set和get的重写

作者: Auditore | 来源:发表于2020-05-31 21:43 被阅读0次

    swift和OC很大的一个不同,就是swift并不能和OC一样,直接重写setter和getter,但swift提供了属性监视和计算属性

    先说计算属性,swift无法重写getter和setter方法,只能去利用计算属性去操作其他的属性。

    如下,now就是一个计算属性,它计算的是nameNow的get和set,而不是和OC一样,直接去重写nameNow的setter和getter

    class Person: NSObject {
        var nameNow: String?
        
        //计算属性
        var now: String? {
            set(wakadika) {
                self.nameNow = wakadika! + "door"
            }
            
            get {
                return self.nameNow
            }
            
        }
        
        //带监视器的普通属性
        var love: NSInteger? {
            willSet {
                
            }
            
            didSet {
                
            }
        }
        
        
    }
    

    如果直接去重写nameNow的set和get会怎样?

    image

    答案是,编译器会提示All paths through this function will call itself导致方法死循环。

    所有通过此函数的调用,都会导致调用自身。死循环崩溃。

    结论就是:

    willSet是值将要改变时触发,存在一个newValue的变量。didSet是值已经改变触发,存在一个oldValue的变量。

    willSet、didSet 和 get、set这两套方法只能二选一,全部实现会报错。所以当想要在get方法里要干事时,就只能用get set方法。而且set方法和willset好像是一样的,都有newValue变量。

    所以如果你想在set和get里做一些操作,在swift中,得额外声明一个计算属性,重写它的set和get方法, 然后通过调用计算属性,来达到操作原属性的目的,但直接重写原属性的willSet,看起来更方便。

    相关文章

      网友评论

        本文标题:swift学习之旅--set和get的重写

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